From a760edf84d51132a0cd9fbe91f2c28e6ed53fa0f Mon Sep 17 00:00:00 2001 From: Tom McDonald Date: Wed, 6 Aug 2025 17:03:35 -0400 Subject: [PATCH 1/3] Allow MethodDesc::GetILHeader to work correctly under rejit scenarios --- src/coreclr/vm/method.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/coreclr/vm/method.cpp b/src/coreclr/vm/method.cpp index 0ebb3d4ddfdec7..d59aff84ceacc9 100644 --- a/src/coreclr/vm/method.cpp +++ b/src/coreclr/vm/method.cpp @@ -1189,11 +1189,6 @@ COR_ILMETHOD* MethodDesc::GetILHeader() CONTRACTL_END RVA rva = GetRVA(); - if (rva == 0) - { - return NULL; - } - Module *pModule = GetModule(); // Always pickup overrides like reflection emit, EnC, etc. @@ -1201,6 +1196,10 @@ COR_ILMETHOD* MethodDesc::GetILHeader() if (pIL == (TADDR)NULL) { + if (rva == 0) + { + return NULL; + } pIL = pModule->GetIL(rva); } From bb85189b992443a916464480a92b130e65175ac2 Mon Sep 17 00:00:00 2001 From: Jan Kotas Date: Wed, 6 Aug 2025 21:25:43 -0700 Subject: [PATCH 2/3] Apply suggestions from code review --- src/coreclr/vm/method.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/coreclr/vm/method.cpp b/src/coreclr/vm/method.cpp index d59aff84ceacc9..80e7fbfd8b7c82 100644 --- a/src/coreclr/vm/method.cpp +++ b/src/coreclr/vm/method.cpp @@ -1188,14 +1188,15 @@ COR_ILMETHOD* MethodDesc::GetILHeader() } CONTRACTL_END - RVA rva = GetRVA(); Module *pModule = GetModule(); - // Always pickup overrides like reflection emit, EnC, etc. + // Always pickup overrides like reflection emit, EnC, etc. irrespective of RVA. + // Profilers can attach dynamic IL to methods with zero RVA. TADDR pIL = pModule->GetDynamicIL(GetMemberDef()); if (pIL == (TADDR)NULL) { + RVA rva = GetRVA(); if (rva == 0) { return NULL; From 92b17ae66b3bbcdad52e2714690964437c83707f Mon Sep 17 00:00:00 2001 From: Jan Kotas Date: Wed, 6 Aug 2025 21:32:01 -0700 Subject: [PATCH 3/3] Update src/coreclr/vm/method.cpp --- src/coreclr/vm/method.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/coreclr/vm/method.cpp b/src/coreclr/vm/method.cpp index 80e7fbfd8b7c82..349a05ec3c5396 100644 --- a/src/coreclr/vm/method.cpp +++ b/src/coreclr/vm/method.cpp @@ -1196,12 +1196,7 @@ COR_ILMETHOD* MethodDesc::GetILHeader() if (pIL == (TADDR)NULL) { - RVA rva = GetRVA(); - if (rva == 0) - { - return NULL; - } - pIL = pModule->GetIL(rva); + pIL = pModule->GetIL(GetRVA()); } #ifdef _DEBUG_IMPL