From f29237930dd54a422b6afec00ef1862c8f0902d7 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Thu, 26 Feb 2026 11:34:49 -0800 Subject: [PATCH 1/7] Convert `PREPARE_SIMPLE_VIRTUAL_CALLSITE` usages to use the UCO pattern --- .../src/System/RuntimeHandles.cs | 55 ++++++++ src/coreclr/vm/corelib.h | 8 +- src/coreclr/vm/dynamicmethod.cpp | 124 +++++++++++------- src/coreclr/vm/metasig.h | 3 + 4 files changed, 142 insertions(+), 48 deletions(-) diff --git a/src/coreclr/System.Private.CoreLib/src/System/RuntimeHandles.cs b/src/coreclr/System.Private.CoreLib/src/System/RuntimeHandles.cs index 4115a1d3c05a4d..59ef79bbc16f7c 100644 --- a/src/coreclr/System.Private.CoreLib/src/System/RuntimeHandles.cs +++ b/src/coreclr/System.Private.CoreLib/src/System/RuntimeHandles.cs @@ -2259,5 +2259,60 @@ internal static unsafe void GetStringLiteral(Resolver* pResolver, int token, str *pException = ex; } } + + [UnmanagedCallersOnly] + internal static unsafe void ResolveToken(Resolver* pResolver, int token, IntPtr* pTypeHandle, IntPtr* pMethodHandle, IntPtr* pFieldHandle, Exception* pException) + { + try + { + pResolver->ResolveToken(token, out IntPtr typeHandle, out IntPtr methodHandle, out IntPtr fieldHandle); + *pTypeHandle = typeHandle; + *pMethodHandle = methodHandle; + *pFieldHandle = fieldHandle; + } + catch (Exception ex) + { + *pException = ex; + } + } + + [UnmanagedCallersOnly] + internal static unsafe void ResolveSignature(Resolver* pResolver, int token, int fromMethod, byte[]* ppResult, Exception* pException) + { + try + { + *ppResult = pResolver->ResolveSignature(token, fromMethod); + } + catch (Exception ex) + { + *pException = ex; + } + } + + [UnmanagedCallersOnly] + internal static unsafe void GetRawEHInfo(Resolver* pResolver, byte[]* ppResult, Exception* pException) + { + try + { + *ppResult = pResolver->GetRawEHInfo(); + } + catch (Exception ex) + { + *pException = ex; + } + } + + [UnmanagedCallersOnly] + internal static unsafe void GetEHInfo(Resolver* pResolver, int EHNumber, void* exception, Exception* pException) + { + try + { + pResolver->GetEHInfo(EHNumber, exception); + } + catch (Exception ex) + { + *pException = ex; + } + } } } diff --git a/src/coreclr/vm/corelib.h b/src/coreclr/vm/corelib.h index df3c00eaac1db3..1b2ba5a3a9f64a 100644 --- a/src/coreclr/vm/corelib.h +++ b/src/coreclr/vm/corelib.h @@ -661,11 +661,11 @@ DEFINE_CLASS(RESOLVER, System, Resolver) DEFINE_METHOD(RESOLVER, GET_JIT_CONTEXT, GetJitContext, SM_PtrResolver_PtrInt_PtrClass_PtrException_RetVoid) DEFINE_METHOD(RESOLVER, GET_CODE_INFO, GetCodeInfo, SM_PtrResolver_PtrInt_PtrInt_PtrInt_PtrArrByte_PtrException_RetVoid) DEFINE_METHOD(RESOLVER, GET_LOCALS_SIGNATURE, GetLocalsSignature, SM_PtrResolver_PtrArrByte_PtrException_RetVoid) -DEFINE_METHOD(RESOLVER, GET_EH_INFO, GetEHInfo, IM_Int_VoidPtr_RetVoid) -DEFINE_METHOD(RESOLVER, GET_RAW_EH_INFO, GetRawEHInfo, IM_RetArrByte) +DEFINE_METHOD(RESOLVER, GET_EH_INFO, GetEHInfo, SM_PtrResolver_Int_PtrVoid_PtrException_RetVoid) +DEFINE_METHOD(RESOLVER, GET_RAW_EH_INFO, GetRawEHInfo, SM_PtrResolver_PtrArrByte_PtrException_RetVoid) DEFINE_METHOD(RESOLVER, GET_STRING_LITERAL, GetStringLiteral, SM_PtrResolver_Int_PtrStr_PtrException_RetVoid) -DEFINE_METHOD(RESOLVER, RESOLVE_TOKEN, ResolveToken, IM_Int_RefIntPtr_RefIntPtr_RefIntPtr_RetVoid) -DEFINE_METHOD(RESOLVER, RESOLVE_SIGNATURE, ResolveSignature, IM_IntInt_RetArrByte) +DEFINE_METHOD(RESOLVER, RESOLVE_TOKEN, ResolveToken, SM_PtrResolver_Int_PtrIntPtr_PtrIntPtr_PtrIntPtr_PtrException_RetVoid) +DEFINE_METHOD(RESOLVER, RESOLVE_SIGNATURE, ResolveSignature, SM_PtrResolver_Int_Int_PtrArrByte_PtrException_RetVoid) DEFINE_CLASS(RESOURCE_MANAGER, Resources, ResourceManager) diff --git a/src/coreclr/vm/dynamicmethod.cpp b/src/coreclr/vm/dynamicmethod.cpp index 0c22f6235a4e25..28007c75d6b856 100644 --- a/src/coreclr/vm/dynamicmethod.cpp +++ b/src/coreclr/vm/dynamicmethod.cpp @@ -1398,20 +1398,26 @@ void LCGMethodResolver::ResolveToken(mdToken token, ResolvedToken* resolvedToken GCX_COOP(); - PREPARE_SIMPLE_VIRTUAL_CALLSITE(METHOD__RESOLVER__RESOLVE_TOKEN, ObjectFromHandle(m_managedResolver)); + struct + { + OBJECTREF Resolver; + } gc; + gc.Resolver = ObjectFromHandle(m_managedResolver); + VALIDATEOBJECTREF(gc.Resolver); // gc root must be up the stack + + GCPROTECT_BEGIN(gc); - DECLARE_ARGHOLDER_ARRAY(args, 5); + UnmanagedCallersOnlyCaller resolveToken(METHOD__RESOLVER__RESOLVE_TOKEN); + TADDR typeHandleValue = 0; + TADDR methodHandleValue = 0; + TADDR fieldHandleValue = 0; + resolveToken.InvokeThrowing(&gc.Resolver, static_cast(token), &typeHandleValue, &methodHandleValue, &fieldHandleValue); - TypeHandle handle; - MethodDesc* pMD = NULL; - FieldDesc* pFD = NULL; - args[ARGNUM_0] = OBJECTREF_TO_ARGHOLDER(ObjectFromHandle(m_managedResolver)); - args[ARGNUM_1] = DWORD_TO_ARGHOLDER(token); - args[ARGNUM_2] = &handle; - args[ARGNUM_3] = &pMD; - args[ARGNUM_4] = &pFD; + TypeHandle handle = TypeHandle::FromTAddr(typeHandleValue); + MethodDesc* pMD = reinterpret_cast(methodHandleValue); + FieldDesc* pFD = reinterpret_cast(fieldHandleValue); - CALL_MANAGED_METHOD_NORET(args); + GCPROTECT_END(); _ASSERTE(pMD == NULL || pFD == NULL); @@ -1443,24 +1449,33 @@ LCGMethodResolver::ResolveSignature( GCX_COOP(); - U1ARRAYREF dataArray = NULL; - - PREPARE_SIMPLE_VIRTUAL_CALLSITE(METHOD__RESOLVER__RESOLVE_SIGNATURE, ObjectFromHandle(m_managedResolver)); + struct + { + OBJECTREF Resolver; + OBJECTREF DataArray; + } gc; + gc.Resolver = ObjectFromHandle(m_managedResolver); + gc.DataArray = NULL; + VALIDATEOBJECTREF(gc.Resolver); // gc root must be up the stack - DECLARE_ARGHOLDER_ARRAY(args, 3); + DWORD cbSig = 0; + PCCOR_SIGNATURE pSig = NULL; - args[ARGNUM_0] = OBJECTREF_TO_ARGHOLDER(ObjectFromHandle(m_managedResolver)); - args[ARGNUM_1] = DWORD_TO_ARGHOLDER(token); - args[ARGNUM_2] = DWORD_TO_ARGHOLDER(0); + GCPROTECT_BEGIN(gc); - CALL_MANAGED_METHOD_RETREF(dataArray, U1ARRAYREF, args); + UnmanagedCallersOnlyCaller resolveSignature(METHOD__RESOLVER__RESOLVE_SIGNATURE); + resolveSignature.InvokeThrowing(&gc.Resolver, static_cast(token), 0, &gc.DataArray); + U1ARRAYREF dataArray = (U1ARRAYREF)gc.DataArray; if (dataArray == NULL) COMPlusThrow(kInvalidProgramException); - DWORD cbSig = dataArray->GetNumComponents(); - PCCOR_SIGNATURE pSig = (PCCOR_SIGNATURE)m_jitTempData.New(cbSig); + cbSig = dataArray->GetNumComponents(); + pSig = (PCCOR_SIGNATURE)m_jitTempData.New(cbSig); memcpy((void *)pSig, dataArray->GetDataPtr(), cbSig); + + GCPROTECT_END(); + return SigPointer(pSig, cbSig); } // LCGMethodResolver::ResolveSignature @@ -1474,24 +1489,33 @@ LCGMethodResolver::ResolveSignatureForVarArg( GCX_COOP(); - U1ARRAYREF dataArray = NULL; - - PREPARE_SIMPLE_VIRTUAL_CALLSITE(METHOD__RESOLVER__RESOLVE_SIGNATURE, ObjectFromHandle(m_managedResolver)); + struct + { + OBJECTREF Resolver; + OBJECTREF DataArray; + } gc; + gc.Resolver = ObjectFromHandle(m_managedResolver); + gc.DataArray = NULL; + VALIDATEOBJECTREF(gc.Resolver); // gc root must be up the stack - DECLARE_ARGHOLDER_ARRAY(args, 3); + DWORD cbSig = 0; + PCCOR_SIGNATURE pSig = NULL; - args[ARGNUM_0] = OBJECTREF_TO_ARGHOLDER(ObjectFromHandle(m_managedResolver)); - args[ARGNUM_1] = DWORD_TO_ARGHOLDER(token); - args[ARGNUM_2] = DWORD_TO_ARGHOLDER(1); + GCPROTECT_BEGIN(gc); - CALL_MANAGED_METHOD_RETREF(dataArray, U1ARRAYREF, args); + UnmanagedCallersOnlyCaller resolveSignature(METHOD__RESOLVER__RESOLVE_SIGNATURE); + resolveSignature.InvokeThrowing(&gc.Resolver, static_cast(token), 1, &gc.DataArray); + U1ARRAYREF dataArray = (U1ARRAYREF)gc.DataArray; if (dataArray == NULL) COMPlusThrow(kInvalidProgramException); - DWORD cbSig = dataArray->GetNumComponents(); - PCCOR_SIGNATURE pSig = (PCCOR_SIGNATURE)m_jitTempData.New(cbSig); + cbSig = dataArray->GetNumComponents(); + pSig = (PCCOR_SIGNATURE)m_jitTempData.New(cbSig); memcpy((void *)pSig, dataArray->GetDataPtr(), cbSig); + + GCPROTECT_END(); + return SigPointer(pSig, cbSig); } // LCGMethodResolver::ResolveSignatureForVarArg @@ -1505,16 +1529,21 @@ void LCGMethodResolver::GetEHInfo(unsigned EHnumber, CORINFO_EH_CLAUSE* clause) // attempt to get the raw EHInfo first { - U1ARRAYREF dataArray; - - PREPARE_SIMPLE_VIRTUAL_CALLSITE(METHOD__RESOLVER__GET_RAW_EH_INFO, ObjectFromHandle(m_managedResolver)); - - DECLARE_ARGHOLDER_ARRAY(args, 1); + struct + { + OBJECTREF Resolver; + OBJECTREF DataArray; + } gc; + gc.Resolver = ObjectFromHandle(m_managedResolver); + gc.DataArray = NULL; + VALIDATEOBJECTREF(gc.Resolver); // gc root must be up the stack - args[ARGNUM_0] = OBJECTREF_TO_ARGHOLDER(ObjectFromHandle(m_managedResolver)); + GCPROTECT_BEGIN(gc); - CALL_MANAGED_METHOD_RETREF(dataArray, U1ARRAYREF, args); + UnmanagedCallersOnlyCaller getRawEhInfo(METHOD__RESOLVER__GET_RAW_EH_INFO); + getRawEhInfo.InvokeThrowing(&gc.Resolver, &gc.DataArray); + U1ARRAYREF dataArray = (U1ARRAYREF)gc.DataArray; if (dataArray != NULL) { COR_ILMETHOD_SECT_EH* pEH = (COR_ILMETHOD_SECT_EH*)dataArray->GetDataPtr(); @@ -1530,21 +1559,28 @@ void LCGMethodResolver::GetEHInfo(unsigned EHnumber, CORINFO_EH_CLAUSE* clause) clause->HandlerLength = ehInfo->GetHandlerLength(); clause->ClassToken = ehInfo->GetClassToken(); clause->FilterOffset = ehInfo->GetFilterOffset(); + GCPROTECT_END(); return; } + + GCPROTECT_END(); } // failed, get the info off the ilgenerator { - PREPARE_SIMPLE_VIRTUAL_CALLSITE(METHOD__RESOLVER__GET_EH_INFO, ObjectFromHandle(m_managedResolver)); + struct + { + OBJECTREF Resolver; + } gc; + gc.Resolver = ObjectFromHandle(m_managedResolver); + VALIDATEOBJECTREF(gc.Resolver); // gc root must be up the stack - DECLARE_ARGHOLDER_ARRAY(args, 3); + GCPROTECT_BEGIN(gc); - args[ARGNUM_0] = OBJECTREF_TO_ARGHOLDER(ObjectFromHandle(m_managedResolver)); - args[ARGNUM_1] = DWORD_TO_ARGHOLDER(EHnumber); - args[ARGNUM_2] = PTR_TO_ARGHOLDER(clause); + UnmanagedCallersOnlyCaller getEhInfo(METHOD__RESOLVER__GET_EH_INFO); + getEhInfo.InvokeThrowing(&gc.Resolver, static_cast(EHnumber), clause); - CALL_MANAGED_METHOD_NORET(args); + GCPROTECT_END(); } } diff --git a/src/coreclr/vm/metasig.h b/src/coreclr/vm/metasig.h index c11dd064c2ca5c..d9963a4ed4448b 100644 --- a/src/coreclr/vm/metasig.h +++ b/src/coreclr/vm/metasig.h @@ -426,6 +426,9 @@ DEFINE_METASIG_T(SM(PtrObj_PtrInt_PtrException_RetVoid, P(j) P(i) P(C(EXCEPTION) DEFINE_METASIG_T(SM(PtrResolver_PtrInt_PtrClass_PtrException_RetVoid, P(C(RESOLVER)) P(i) P(C(CLASS)) P(C(EXCEPTION)), v)) DEFINE_METASIG_T(SM(PtrResolver_PtrInt_PtrInt_PtrInt_PtrArrByte_PtrException_RetVoid, P(C(RESOLVER)) P(i) P(i) P(i) P(a(b)) P(C(EXCEPTION)), v)) DEFINE_METASIG_T(SM(PtrResolver_PtrArrByte_PtrException_RetVoid, P(C(RESOLVER)) P(a(b)) P(C(EXCEPTION)), v)) +DEFINE_METASIG_T(SM(PtrResolver_Int_PtrVoid_PtrException_RetVoid, P(C(RESOLVER)) i P(v) P(C(EXCEPTION)), v)) +DEFINE_METASIG_T(SM(PtrResolver_Int_PtrIntPtr_PtrIntPtr_PtrIntPtr_PtrException_RetVoid, P(C(RESOLVER)) i P(I) P(I) P(I) P(C(EXCEPTION)), v)) +DEFINE_METASIG_T(SM(PtrResolver_Int_Int_PtrArrByte_PtrException_RetVoid, P(C(RESOLVER)) i i P(a(b)) P(C(EXCEPTION)), v)) DEFINE_METASIG_T(SM(PtrResolver_Int_PtrStr_PtrException_RetVoid, P(C(RESOLVER)) i P(s) P(C(EXCEPTION)), v)) // fields - e.g.: From f577106bb9439df4739b8c43c900901e9955b3f6 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Thu, 26 Feb 2026 11:36:29 -0800 Subject: [PATCH 2/7] Remove PREPARE_SIMPLE_VIRTUAL_CALLSITE now that it's unused --- src/coreclr/vm/callhelpers.h | 34 +--------------------------------- 1 file changed, 1 insertion(+), 33 deletions(-) diff --git a/src/coreclr/vm/callhelpers.h b/src/coreclr/vm/callhelpers.h index 2f2c7d539794a4..3999850d44b155 100644 --- a/src/coreclr/vm/callhelpers.h +++ b/src/coreclr/vm/callhelpers.h @@ -534,38 +534,6 @@ enum DispatchCallSimpleFlags #define PREPARE_VIRTUAL_CALLSITE_USING_METHODDESC(pMD, objref) \ PCODE __pSlot = pMD->GetCallTarget(&objref); -#ifdef _DEBUG -#define SIMPLE_VIRTUAL_METHOD_CHECK(slotNumber, methodTable) \ - { \ - MethodDesc* __pMeth = methodTable->GetMethodDescForSlot(slotNumber); \ - _ASSERTE(__pMeth); \ - _ASSERTE(!__pMeth->HasMethodInstantiation() && \ - !__pMeth->GetMethodTable()->IsInterface()); \ - } -#else -#define SIMPLE_VIRTUAL_METHOD_CHECK(slotNumber, objref) -#endif - -// a simple virtual method is a non-interface/non-generic method -// Note: objref has to be protected! -#define PREPARE_SIMPLE_VIRTUAL_CALLSITE(id, objref) \ - static WORD s_slot##id = MethodTable::NO_SLOT; \ - WORD __slot = VolatileLoad(&s_slot##id); \ - if (__slot == MethodTable::NO_SLOT) \ - { \ - MethodDesc *pMeth = CoreLibBinder::GetMethod(id); \ - _ASSERTE(pMeth); \ - __slot = pMeth->GetSlot(); \ - VolatileStore(&s_slot##id, __slot); \ - } \ - PREPARE_SIMPLE_VIRTUAL_CALLSITE_USING_SLOT(__slot, objref) \ - -// a simple virtual method is a non-interface/non-generic method -#define PREPARE_SIMPLE_VIRTUAL_CALLSITE_USING_SLOT(slotNumber, objref) \ - MethodTable* __pObjMT = (objref)->GetMethodTable(); \ - SIMPLE_VIRTUAL_METHOD_CHECK(slotNumber, __pObjMT); \ - PCODE __pSlot = (PCODE) __pObjMT->GetRestoredSlot(slotNumber); - #define PREPARE_NONVIRTUAL_CALLSITE_USING_METHODDESC(pMD) \ PCODE __pSlot = (pMD)->GetSingleCallableAddrOfCode(); @@ -761,7 +729,7 @@ class UnmanagedCallersOnlyCaller final MODE_COOPERATIVE; } CONTRACTL_END; - + // Sanity check - UnmanagedCallersOnly methods must be in CoreLib. // See below load level override. _ASSERTE(_pMD->GetModule()->IsSystem()); From 455a3dbbe9e0ddef630b114849e29f7488997c44 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Fri, 27 Feb 2026 18:28:59 +0000 Subject: [PATCH 3/7] Fix bad copilot generation --- src/coreclr/vm/dynamicmethod.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/coreclr/vm/dynamicmethod.cpp b/src/coreclr/vm/dynamicmethod.cpp index 28007c75d6b856..f9fba5a662f3d1 100644 --- a/src/coreclr/vm/dynamicmethod.cpp +++ b/src/coreclr/vm/dynamicmethod.cpp @@ -1405,6 +1405,10 @@ void LCGMethodResolver::ResolveToken(mdToken token, ResolvedToken* resolvedToken gc.Resolver = ObjectFromHandle(m_managedResolver); VALIDATEOBJECTREF(gc.Resolver); // gc root must be up the stack + TypeHandle handle; + MethodDesc* pMD; + FieldDesc* pFD; + GCPROTECT_BEGIN(gc); UnmanagedCallersOnlyCaller resolveToken(METHOD__RESOLVER__RESOLVE_TOKEN); @@ -1413,9 +1417,9 @@ void LCGMethodResolver::ResolveToken(mdToken token, ResolvedToken* resolvedToken TADDR fieldHandleValue = 0; resolveToken.InvokeThrowing(&gc.Resolver, static_cast(token), &typeHandleValue, &methodHandleValue, &fieldHandleValue); - TypeHandle handle = TypeHandle::FromTAddr(typeHandleValue); - MethodDesc* pMD = reinterpret_cast(methodHandleValue); - FieldDesc* pFD = reinterpret_cast(fieldHandleValue); + handle = TypeHandle::FromTAddr(typeHandleValue); + pMD = reinterpret_cast(methodHandleValue); + pFD = reinterpret_cast(fieldHandleValue); GCPROTECT_END(); @@ -1559,7 +1563,6 @@ void LCGMethodResolver::GetEHInfo(unsigned EHnumber, CORINFO_EH_CLAUSE* clause) clause->HandlerLength = ehInfo->GetHandlerLength(); clause->ClassToken = ehInfo->GetClassToken(); clause->FilterOffset = ehInfo->GetFilterOffset(); - GCPROTECT_END(); return; } From ace2bda05e4de7db8e7cddf35df81d42b71a18c0 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Fri, 27 Feb 2026 18:34:08 +0000 Subject: [PATCH 4/7] Add reverse call helpers for wasm --- src/coreclr/vm/wasm/callhelpers-reverse.cpp | 56 +++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/src/coreclr/vm/wasm/callhelpers-reverse.cpp b/src/coreclr/vm/wasm/callhelpers-reverse.cpp index e87eed8c3c5477..5939fa32694265 100644 --- a/src/coreclr/vm/wasm/callhelpers-reverse.cpp +++ b/src/coreclr/vm/wasm/callhelpers-reverse.cpp @@ -248,6 +248,19 @@ static void Call_System_Private_CoreLib_System_Resolver_GetCodeInfo_I32_I32_I32_ ExecuteInterpretedMethodFromUnmanaged(MD_System_Private_CoreLib_System_Resolver_GetCodeInfo_I32_I32_I32_I32_I32_I32_RetVoid, (int8_t*)args, sizeof(args), nullptr, (PCODE)&Call_System_Private_CoreLib_System_Resolver_GetCodeInfo_I32_I32_I32_I32_I32_I32_RetVoid); } +static MethodDesc* MD_System_Private_CoreLib_System_Resolver_GetEHInfo_I32_I32_I32_I32_RetVoid = nullptr; +static void Call_System_Private_CoreLib_System_Resolver_GetEHInfo_I32_I32_I32_I32_RetVoid(void * arg0, int32_t arg1, void * arg2, void * arg3) +{ + int64_t args[4] = { (int64_t)arg0, (int64_t)arg1, (int64_t)arg2, (int64_t)arg3 }; + + // Lazy lookup of MethodDesc for the function export scenario. + if (!MD_System_Private_CoreLib_System_Resolver_GetEHInfo_I32_I32_I32_I32_RetVoid) + { + LookupUnmanagedCallersOnlyMethodByName("System.Resolver, System.Private.CoreLib", "GetEHInfo", &MD_System_Private_CoreLib_System_Resolver_GetEHInfo_I32_I32_I32_I32_RetVoid); + } + ExecuteInterpretedMethodFromUnmanaged(MD_System_Private_CoreLib_System_Resolver_GetEHInfo_I32_I32_I32_I32_RetVoid, (int8_t*)args, sizeof(args), nullptr, (PCODE)&Call_System_Private_CoreLib_System_Resolver_GetEHInfo_I32_I32_I32_I32_RetVoid); +} + static MethodDesc* MD_System_Private_CoreLib_Internal_Runtime_InteropServices_ComponentActivator_GetFunctionPointer_I32_I32_I32_I32_I32_I32_RetI32 = nullptr; static int32_t Call_System_Private_CoreLib_Internal_Runtime_InteropServices_ComponentActivator_GetFunctionPointer_I32_I32_I32_I32_I32_I32_RetI32(void * arg0, void * arg1, void * arg2, void * arg3, void * arg4, void * arg5) { @@ -308,6 +321,19 @@ extern "C" void SystemInteropJS_GetManagedStackTrace(void * arg0) Call_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_GetManagedStackTrace_I32_RetVoid(arg0); } +static MethodDesc* MD_System_Private_CoreLib_System_Resolver_GetRawEHInfo_I32_I32_I32_RetVoid = nullptr; +static void Call_System_Private_CoreLib_System_Resolver_GetRawEHInfo_I32_I32_I32_RetVoid(void * arg0, void * arg1, void * arg2) +{ + int64_t args[3] = { (int64_t)arg0, (int64_t)arg1, (int64_t)arg2 }; + + // Lazy lookup of MethodDesc for the function export scenario. + if (!MD_System_Private_CoreLib_System_Resolver_GetRawEHInfo_I32_I32_I32_RetVoid) + { + LookupUnmanagedCallersOnlyMethodByName("System.Resolver, System.Private.CoreLib", "GetRawEHInfo", &MD_System_Private_CoreLib_System_Resolver_GetRawEHInfo_I32_I32_I32_RetVoid); + } + ExecuteInterpretedMethodFromUnmanaged(MD_System_Private_CoreLib_System_Resolver_GetRawEHInfo_I32_I32_I32_RetVoid, (int8_t*)args, sizeof(args), nullptr, (PCODE)&Call_System_Private_CoreLib_System_Resolver_GetRawEHInfo_I32_I32_I32_RetVoid); +} + static MethodDesc* MD_System_Private_CoreLib_System_Resolver_GetStringLiteral_I32_I32_I32_I32_RetVoid = nullptr; static void Call_System_Private_CoreLib_System_Resolver_GetStringLiteral_I32_I32_I32_I32_RetVoid(void * arg0, int32_t arg1, void * arg2, void * arg3) { @@ -526,6 +552,32 @@ static void Call_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContex ExecuteInterpretedMethodFromUnmanaged(MD_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_ResolveSatelliteAssembly_I32_I32_I32_I32_RetVoid, (int8_t*)args, sizeof(args), nullptr, (PCODE)&Call_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_ResolveSatelliteAssembly_I32_I32_I32_I32_RetVoid); } +static MethodDesc* MD_System_Private_CoreLib_System_Resolver_ResolveSignature_I32_I32_I32_I32_I32_RetVoid = nullptr; +static void Call_System_Private_CoreLib_System_Resolver_ResolveSignature_I32_I32_I32_I32_I32_RetVoid(void * arg0, int32_t arg1, int32_t arg2, void * arg3, void * arg4) +{ + int64_t args[5] = { (int64_t)arg0, (int64_t)arg1, (int64_t)arg2, (int64_t)arg3, (int64_t)arg4 }; + + // Lazy lookup of MethodDesc for the function export scenario. + if (!MD_System_Private_CoreLib_System_Resolver_ResolveSignature_I32_I32_I32_I32_I32_RetVoid) + { + LookupUnmanagedCallersOnlyMethodByName("System.Resolver, System.Private.CoreLib", "ResolveSignature", &MD_System_Private_CoreLib_System_Resolver_ResolveSignature_I32_I32_I32_I32_I32_RetVoid); + } + ExecuteInterpretedMethodFromUnmanaged(MD_System_Private_CoreLib_System_Resolver_ResolveSignature_I32_I32_I32_I32_I32_RetVoid, (int8_t*)args, sizeof(args), nullptr, (PCODE)&Call_System_Private_CoreLib_System_Resolver_ResolveSignature_I32_I32_I32_I32_I32_RetVoid); +} + +static MethodDesc* MD_System_Private_CoreLib_System_Resolver_ResolveToken_I32_I32_I32_I32_I32_I32_RetVoid = nullptr; +static void Call_System_Private_CoreLib_System_Resolver_ResolveToken_I32_I32_I32_I32_I32_I32_RetVoid(void * arg0, int32_t arg1, void * arg2, void * arg3, void * arg4, void * arg5) +{ + int64_t args[6] = { (int64_t)arg0, (int64_t)arg1, (int64_t)arg2, (int64_t)arg3, (int64_t)arg4, (int64_t)arg5 }; + + // Lazy lookup of MethodDesc for the function export scenario. + if (!MD_System_Private_CoreLib_System_Resolver_ResolveToken_I32_I32_I32_I32_I32_I32_RetVoid) + { + LookupUnmanagedCallersOnlyMethodByName("System.Resolver, System.Private.CoreLib", "ResolveToken", &MD_System_Private_CoreLib_System_Resolver_ResolveToken_I32_I32_I32_I32_I32_I32_RetVoid); + } + ExecuteInterpretedMethodFromUnmanaged(MD_System_Private_CoreLib_System_Resolver_ResolveToken_I32_I32_I32_I32_I32_I32_RetVoid, (int8_t*)args, sizeof(args), nullptr, (PCODE)&Call_System_Private_CoreLib_System_Resolver_ResolveToken_I32_I32_I32_I32_I32_I32_RetVoid); +} + static MethodDesc* MD_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_ResolveUsingEvent_I32_I32_I32_I32_RetVoid = nullptr; static void Call_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_ResolveUsingEvent_I32_I32_I32_I32_RetVoid(void * arg0, void * arg1, void * arg2, void * arg3) { @@ -602,10 +654,12 @@ extern const ReverseThunkMapEntry g_ReverseThunks[] = { 2644325558, 1196551088, { &MD_System_Private_CoreLib_System_Globalization_CalendarData_EnumCalendarInfoCallback_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Globalization_CalendarData_EnumCalendarInfoCallback_I32_I32_RetVoid } } /* alternate key source: EnumCalendarInfoCallback#2:System.Private.CoreLib:System.Globalization:CalendarData */, { 2644360761, 2613312799, { &MD_System_Private_CoreLib_Internal_Runtime_InteropServices_ComActivator_GetClassFactoryForTypeInternal_I32_RetI32, (void*)&Call_System_Private_CoreLib_Internal_Runtime_InteropServices_ComActivator_GetClassFactoryForTypeInternal_I32_RetI32 } } /* alternate key source: GetClassFactoryForTypeInternal#1:System.Private.CoreLib:Internal.Runtime.InteropServices:ComActivator */, { 2644318622, 2605868264, { &MD_System_Private_CoreLib_System_Resolver_GetCodeInfo_I32_I32_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Resolver_GetCodeInfo_I32_I32_I32_I32_I32_I32_RetVoid } } /* alternate key source: GetCodeInfo#6:System.Private.CoreLib:System:Resolver */, + { 2644318258, 3509777290, { &MD_System_Private_CoreLib_System_Resolver_GetEHInfo_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Resolver_GetEHInfo_I32_I32_I32_I32_RetVoid } } /* alternate key source: GetEHInfo#4:System.Private.CoreLib:System:Resolver */, { 2644360771, 993231473, { &MD_System_Private_CoreLib_Internal_Runtime_InteropServices_ComponentActivator_GetFunctionPointer_I32_I32_I32_I32_I32_I32_RetI32, (void*)&Call_System_Private_CoreLib_Internal_Runtime_InteropServices_ComponentActivator_GetFunctionPointer_I32_I32_I32_I32_I32_I32_RetI32 } } /* alternate key source: GetFunctionPointer#6:System.Private.CoreLib:Internal.Runtime.InteropServices:ComponentActivator */, { 2644318625, 4101188193, { &MD_System_Private_CoreLib_System_Resolver_GetJitContext_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Resolver_GetJitContext_I32_I32_I32_I32_RetVoid } } /* alternate key source: GetJitContext#4:System.Private.CoreLib:System:Resolver */, { 2644318623, 2512220404, { &MD_System_Private_CoreLib_System_Resolver_GetLocalsSignature_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Resolver_GetLocalsSignature_I32_I32_I32_RetVoid } } /* alternate key source: GetLocalsSignature#3:System.Private.CoreLib:System:Resolver */, { 3685902051, 1081971317, { &MD_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_GetManagedStackTrace_I32_RetVoid, (void*)&Call_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_GetManagedStackTrace_I32_RetVoid } } /* alternate key source: GetManagedStackTrace#1:System.Runtime.InteropServices.JavaScript:System.Runtime.InteropServices.JavaScript:JavaScriptExports */, + { 2644318261, 2774706601, { &MD_System_Private_CoreLib_System_Resolver_GetRawEHInfo_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Resolver_GetRawEHInfo_I32_I32_I32_RetVoid } } /* alternate key source: GetRawEHInfo#3:System.Private.CoreLib:System:Resolver */, { 2644318620, 831291767, { &MD_System_Private_CoreLib_System_Resolver_GetStringLiteral_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Resolver_GetStringLiteral_I32_I32_I32_I32_RetVoid } } /* alternate key source: GetStringLiteral#4:System.Private.CoreLib:System:Resolver */, { 2644348538, 513042204, { &MD_System_Private_CoreLib_System_Diagnostics_Tracing_EventSource_InitializeDefaultEventSources_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Diagnostics_Tracing_EventSource_InitializeDefaultEventSources_I32_RetVoid } } /* alternate key source: InitializeDefaultEventSources#1:System.Private.CoreLib:System.Diagnostics.Tracing:EventSource */, { 2644360772, 3422156547, { &MD_System_Private_CoreLib_Internal_Runtime_InteropServices_ComponentActivator_LoadAssembly_I32_I32_I32_RetI32, (void*)&Call_System_Private_CoreLib_Internal_Runtime_InteropServices_ComponentActivator_LoadAssembly_I32_I32_I32_RetI32 } } /* alternate key source: LoadAssembly#3:System.Private.CoreLib:Internal.Runtime.InteropServices:ComponentActivator */, @@ -621,6 +675,8 @@ extern const ReverseThunkMapEntry g_ReverseThunks[] = { 3685901980, 1403522766, { &MD_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_ReleaseJSOwnedObjectByGCHandle_I32_RetVoid, (void*)&Call_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_ReleaseJSOwnedObjectByGCHandle_I32_RetVoid } } /* alternate key source: ReleaseJSOwnedObjectByGCHandle#1:System.Runtime.InteropServices.JavaScript:System.Runtime.InteropServices.JavaScript:JavaScriptExports */, { 2644340372, 225437511, { &MD_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_Resolve_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_Resolve_I32_I32_I32_I32_RetVoid } } /* alternate key source: Resolve#4:System.Private.CoreLib:System.Runtime.Loader:AssemblyLoadContext */, { 2644340373, 260403842, { &MD_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_ResolveSatelliteAssembly_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_ResolveSatelliteAssembly_I32_I32_I32_I32_RetVoid } } /* alternate key source: ResolveSatelliteAssembly#4:System.Private.CoreLib:System.Runtime.Loader:AssemblyLoadContext */, + { 2644318260, 426514126, { &MD_System_Private_CoreLib_System_Resolver_ResolveSignature_I32_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Resolver_ResolveSignature_I32_I32_I32_I32_I32_RetVoid } } /* alternate key source: ResolveSignature#5:System.Private.CoreLib:System:Resolver */, + { 2644318263, 2988924914, { &MD_System_Private_CoreLib_System_Resolver_ResolveToken_I32_I32_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Resolver_ResolveToken_I32_I32_I32_I32_I32_I32_RetVoid } } /* alternate key source: ResolveToken#6:System.Private.CoreLib:System:Resolver */, { 2644340370, 2533042349, { &MD_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_ResolveUsingEvent_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_ResolveUsingEvent_I32_I32_I32_I32_RetVoid } } /* alternate key source: ResolveUsingEvent#4:System.Private.CoreLib:System.Runtime.Loader:AssemblyLoadContext */, { 2644317641, 1963568864, { &MD_System_Private_CoreLib_System_AppContext_Setup_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_AppContext_Setup_I32_I32_I32_I32_RetVoid } } /* alternate key source: Setup#4:System.Private.CoreLib:System:AppContext */, { 2644321594, 167179540, { &MD_System_Private_CoreLib_System_Threading_TimerQueue_TimerHandler_Void_RetVoid, (void*)&Call_System_Private_CoreLib_System_Threading_TimerQueue_TimerHandler_Void_RetVoid } } /* alternate key source: TimerHandler#0:System.Private.CoreLib:System.Threading:TimerQueue */, From 90919806a70f6b76cfb05fcdc49d2def397f7970 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Fri, 27 Feb 2026 22:37:03 +0000 Subject: [PATCH 5/7] Basic PR cleanup --- .../src/System/RuntimeHandles.cs | 5 +- src/coreclr/vm/dynamicmethod.cpp | 57 ++++++------------- src/coreclr/vm/metasig.h | 4 -- 3 files changed, 17 insertions(+), 49 deletions(-) diff --git a/src/coreclr/System.Private.CoreLib/src/System/RuntimeHandles.cs b/src/coreclr/System.Private.CoreLib/src/System/RuntimeHandles.cs index 59ef79bbc16f7c..f74335be08c601 100644 --- a/src/coreclr/System.Private.CoreLib/src/System/RuntimeHandles.cs +++ b/src/coreclr/System.Private.CoreLib/src/System/RuntimeHandles.cs @@ -2265,10 +2265,7 @@ internal static unsafe void ResolveToken(Resolver* pResolver, int token, IntPtr* { try { - pResolver->ResolveToken(token, out IntPtr typeHandle, out IntPtr methodHandle, out IntPtr fieldHandle); - *pTypeHandle = typeHandle; - *pMethodHandle = methodHandle; - *pFieldHandle = fieldHandle; + pResolver->ResolveToken(token, out *pTypeHandle, out *pMethodHandle, out *pFieldHandle); } catch (Exception ex) { diff --git a/src/coreclr/vm/dynamicmethod.cpp b/src/coreclr/vm/dynamicmethod.cpp index f9fba5a662f3d1..fb800949eb2109 100644 --- a/src/coreclr/vm/dynamicmethod.cpp +++ b/src/coreclr/vm/dynamicmethod.cpp @@ -1179,11 +1179,10 @@ BYTE* LCGMethodResolver::GetCodeInfo(unsigned *pCodeSize, unsigned *pStackSize, struct { OBJECTREF Resolver; - OBJECTREF DataArray; + U1ARRAYREF DataArray; } gc; gc.Resolver = ObjectFromHandle(m_managedResolver); gc.DataArray = NULL; - VALIDATEOBJECTREF(gc.Resolver); // gc root must be up the stack GCPROTECT_BEGIN(gc); @@ -1192,10 +1191,9 @@ BYTE* LCGMethodResolver::GetCodeInfo(unsigned *pCodeSize, unsigned *pStackSize, UnmanagedCallersOnlyCaller getCodeInfo(METHOD__RESOLVER__GET_CODE_INFO); getCodeInfo.InvokeThrowing(&gc.Resolver, &stackSize, &initLocals, &EHSize, &gc.DataArray); - U1ARRAYREF dataArray = (U1ARRAYREF)gc.DataArray; - DWORD codeSize = dataArray->GetNumComponents(); + DWORD codeSize = gc.DataArray->GetNumComponents(); NewArrayHolder code(new BYTE[codeSize]); - memcpy(code, dataArray->GetDataPtr(), codeSize); + memcpy(code, gc.DataArray->GetDataPtr(), codeSize); m_CodeSize = codeSize; _ASSERTE(FitsIn(stackSize)); m_StackSize = static_cast(stackSize); @@ -1236,21 +1234,19 @@ LCGMethodResolver::GetLocalSig() struct { OBJECTREF Resolver; - OBJECTREF DataArray; + U1ARRAYREF DataArray; } gc; gc.Resolver = ObjectFromHandle(m_managedResolver); gc.DataArray = NULL; - VALIDATEOBJECTREF(gc.Resolver); // gc root must be up the stack GCPROTECT_BEGIN(gc); UnmanagedCallersOnlyCaller getLocalsSignature(METHOD__RESOLVER__GET_LOCALS_SIGNATURE); getLocalsSignature.InvokeThrowing(&gc.Resolver, &gc.DataArray); - U1ARRAYREF dataArray = (U1ARRAYREF)gc.DataArray; - DWORD localSigSize = dataArray->GetNumComponents(); + DWORD localSigSize = gc.DataArray->GetNumComponents(); NewArrayHolder localSig(new COR_SIGNATURE[localSigSize]); - memcpy((void *)localSig, dataArray->GetDataPtr(), localSigSize); + memcpy((void *)localSig, gc.DataArray->GetDataPtr(), localSigSize); m_LocalSig = SigPointer((PCCOR_SIGNATURE)localSig, localSigSize); localSig.SuppressRelease(); @@ -1320,7 +1316,6 @@ LCGMethodResolver::GetStringLiteral( } gc; gc.Resolver = ObjectFromHandle(m_managedResolver); gc.Result = NULL; - VALIDATEOBJECTREF(gc.Resolver); // gc root must be up the stack GCPROTECT_BEGIN(gc); @@ -1403,7 +1398,6 @@ void LCGMethodResolver::ResolveToken(mdToken token, ResolvedToken* resolvedToken OBJECTREF Resolver; } gc; gc.Resolver = ObjectFromHandle(m_managedResolver); - VALIDATEOBJECTREF(gc.Resolver); // gc root must be up the stack TypeHandle handle; MethodDesc* pMD; @@ -1413,15 +1407,9 @@ void LCGMethodResolver::ResolveToken(mdToken token, ResolvedToken* resolvedToken UnmanagedCallersOnlyCaller resolveToken(METHOD__RESOLVER__RESOLVE_TOKEN); TADDR typeHandleValue = 0; - TADDR methodHandleValue = 0; - TADDR fieldHandleValue = 0; - resolveToken.InvokeThrowing(&gc.Resolver, static_cast(token), &typeHandleValue, &methodHandleValue, &fieldHandleValue); + resolveToken.InvokeThrowing(&gc.Resolver, static_cast(token), &typeHandleValue, &pMD, &pFD); handle = TypeHandle::FromTAddr(typeHandleValue); - pMD = reinterpret_cast(methodHandleValue); - pFD = reinterpret_cast(fieldHandleValue); - - GCPROTECT_END(); _ASSERTE(pMD == NULL || pFD == NULL); @@ -1456,11 +1444,10 @@ LCGMethodResolver::ResolveSignature( struct { OBJECTREF Resolver; - OBJECTREF DataArray; + U1ARRAYREF DataArray; } gc; gc.Resolver = ObjectFromHandle(m_managedResolver); gc.DataArray = NULL; - VALIDATEOBJECTREF(gc.Resolver); // gc root must be up the stack DWORD cbSig = 0; PCCOR_SIGNATURE pSig = NULL; @@ -1470,13 +1457,9 @@ LCGMethodResolver::ResolveSignature( UnmanagedCallersOnlyCaller resolveSignature(METHOD__RESOLVER__RESOLVE_SIGNATURE); resolveSignature.InvokeThrowing(&gc.Resolver, static_cast(token), 0, &gc.DataArray); - U1ARRAYREF dataArray = (U1ARRAYREF)gc.DataArray; - if (dataArray == NULL) - COMPlusThrow(kInvalidProgramException); - - cbSig = dataArray->GetNumComponents(); + cbSig = gc.DataArray->GetNumComponents(); pSig = (PCCOR_SIGNATURE)m_jitTempData.New(cbSig); - memcpy((void *)pSig, dataArray->GetDataPtr(), cbSig); + memcpy((void *)pSig, gc.DataArray->GetDataPtr(), cbSig); GCPROTECT_END(); @@ -1496,11 +1479,10 @@ LCGMethodResolver::ResolveSignatureForVarArg( struct { OBJECTREF Resolver; - OBJECTREF DataArray; + U1ARRAYREF DataArray; } gc; gc.Resolver = ObjectFromHandle(m_managedResolver); gc.DataArray = NULL; - VALIDATEOBJECTREF(gc.Resolver); // gc root must be up the stack DWORD cbSig = 0; PCCOR_SIGNATURE pSig = NULL; @@ -1510,13 +1492,9 @@ LCGMethodResolver::ResolveSignatureForVarArg( UnmanagedCallersOnlyCaller resolveSignature(METHOD__RESOLVER__RESOLVE_SIGNATURE); resolveSignature.InvokeThrowing(&gc.Resolver, static_cast(token), 1, &gc.DataArray); - U1ARRAYREF dataArray = (U1ARRAYREF)gc.DataArray; - if (dataArray == NULL) - COMPlusThrow(kInvalidProgramException); - - cbSig = dataArray->GetNumComponents(); + cbSig = gc.DataArray->GetNumComponents(); pSig = (PCCOR_SIGNATURE)m_jitTempData.New(cbSig); - memcpy((void *)pSig, dataArray->GetDataPtr(), cbSig); + memcpy((void *)pSig, gc.DataArray->GetDataPtr(), cbSig); GCPROTECT_END(); @@ -1536,21 +1514,19 @@ void LCGMethodResolver::GetEHInfo(unsigned EHnumber, CORINFO_EH_CLAUSE* clause) struct { OBJECTREF Resolver; - OBJECTREF DataArray; + U1ARRAYREF DataArray; } gc; gc.Resolver = ObjectFromHandle(m_managedResolver); gc.DataArray = NULL; - VALIDATEOBJECTREF(gc.Resolver); // gc root must be up the stack GCPROTECT_BEGIN(gc); UnmanagedCallersOnlyCaller getRawEhInfo(METHOD__RESOLVER__GET_RAW_EH_INFO); getRawEhInfo.InvokeThrowing(&gc.Resolver, &gc.DataArray); - U1ARRAYREF dataArray = (U1ARRAYREF)gc.DataArray; - if (dataArray != NULL) + if (gc.DataArray != NULL) { - COR_ILMETHOD_SECT_EH* pEH = (COR_ILMETHOD_SECT_EH*)dataArray->GetDataPtr(); + COR_ILMETHOD_SECT_EH* pEH = (COR_ILMETHOD_SECT_EH*)gc.DataArray->GetDataPtr(); COR_ILMETHOD_SECT_EH_CLAUSE_FAT ehClause; const COR_ILMETHOD_SECT_EH_CLAUSE_FAT* ehInfo; @@ -1576,7 +1552,6 @@ void LCGMethodResolver::GetEHInfo(unsigned EHnumber, CORINFO_EH_CLAUSE* clause) OBJECTREF Resolver; } gc; gc.Resolver = ObjectFromHandle(m_managedResolver); - VALIDATEOBJECTREF(gc.Resolver); // gc root must be up the stack GCPROTECT_BEGIN(gc); diff --git a/src/coreclr/vm/metasig.h b/src/coreclr/vm/metasig.h index d9963a4ed4448b..0c98ef22591e3f 100644 --- a/src/coreclr/vm/metasig.h +++ b/src/coreclr/vm/metasig.h @@ -302,7 +302,6 @@ DEFINE_METASIG_T(SM(Type_RetInt, C(TYPE), i)) DEFINE_METASIG(IM(Long_RetVoid, l, v)) DEFINE_METASIG(IM(IntPtr_Int_RetVoid, I i, v)) -DEFINE_METASIG(IM(IntInt_RetArrByte, i i, a(b))) DEFINE_METASIG(IM(RetIntPtr, _, I)) DEFINE_METASIG(IM(RetInt, _, i)) DEFINE_METASIG_T(IM(RetModule, _, C(MODULE))) @@ -315,7 +314,6 @@ DEFINE_METASIG(IM(RetStr, _, s)) DEFINE_METASIG_T(IM(RetType, _, C(TYPE))) DEFINE_METASIG(IM(RetVoid, _, v)) DEFINE_METASIG(IM(RetBool, _, F)) -DEFINE_METASIG(IM(RetArrByte, _, a(b))) DEFINE_METASIG_T(IM(RetArrParameterInfo, _, a(C(PARAMETER)))) DEFINE_METASIG_T(IM(Bool_RetMethodInfo, F, C(METHOD_INFO))) @@ -344,7 +342,6 @@ DEFINE_METASIG(IM(Obj_Int_RetIntPtr, j i, I)) DEFINE_METASIG(IM(Char_Int_RetVoid, u i, v)) DEFINE_METASIG_T(SM(RetCultureInfo, _, C(CULTURE_INFO))) DEFINE_METASIG_T(SM(CultureInfo_RetVoid, C(CULTURE_INFO), v)) -DEFINE_METASIG(IM(Int_RefIntPtr_RefIntPtr_RefIntPtr_RetVoid, i r(I) r(I) r(I), v)) DEFINE_METASIG(IM(Int_RetStr, i, s)) DEFINE_METASIG(IM(Int_RetVoid, i, v)) @@ -365,7 +362,6 @@ DEFINE_METASIG_T(IM(Obj_Obj_BindingFlags_Binder_CultureInfo_RetVoid, j j g(BINDI DEFINE_METASIG_T(IM(Obj_Obj_BindingFlags_Binder_ArrObj_CultureInfo_RetVoid, j j g(BINDING_FLAGS) C(BINDER) a(j) C(CULTURE_INFO), v)) DEFINE_METASIG_T(IM(Obj_BindingFlags_Binder_ArrObj_CultureInfo_RetObj, j g(BINDING_FLAGS) C(BINDER) a(j) C(CULTURE_INFO), j)) DEFINE_METASIG_T(IM(Class_RetObj, C(CLASS), j)) -DEFINE_METASIG(IM(Int_VoidPtr_RetVoid, i P(v), v)) DEFINE_METASIG(SM(VoidPtr_RetObj, P(v), j)) DEFINE_METASIG(SM(Str_RetStr, s, s)) From 784690822eddf88274216940fd60a7cbe2c31380 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Sat, 28 Feb 2026 01:13:40 +0000 Subject: [PATCH 6/7] Bring the two eh callbacks into one --- .../src/System/RuntimeHandles.cs | 26 +++---- src/coreclr/vm/corelib.h | 3 +- src/coreclr/vm/dynamicmethod.cpp | 67 +++++++------------ src/coreclr/vm/metasig.h | 3 +- src/coreclr/vm/wasm/callhelpers-reverse.cpp | 28 -------- 5 files changed, 37 insertions(+), 90 deletions(-) diff --git a/src/coreclr/System.Private.CoreLib/src/System/RuntimeHandles.cs b/src/coreclr/System.Private.CoreLib/src/System/RuntimeHandles.cs index f74335be08c601..34f18bf94ac664 100644 --- a/src/coreclr/System.Private.CoreLib/src/System/RuntimeHandles.cs +++ b/src/coreclr/System.Private.CoreLib/src/System/RuntimeHandles.cs @@ -2287,24 +2287,20 @@ internal static unsafe void ResolveSignature(Resolver* pResolver, int token, int } [UnmanagedCallersOnly] - internal static unsafe void GetRawEHInfo(Resolver* pResolver, byte[]* ppResult, Exception* pException) + internal static unsafe void GetEHInfo(Resolver* pResolver, int EHNumber, byte[]* ppRawEHInfo, void* parsedEHInfo, Exception* pException) { try { - *ppResult = pResolver->GetRawEHInfo(); - } - catch (Exception ex) - { - *pException = ex; - } - } - - [UnmanagedCallersOnly] - internal static unsafe void GetEHInfo(Resolver* pResolver, int EHNumber, void* exception, Exception* pException) - { - try - { - pResolver->GetEHInfo(EHNumber, exception); + byte[]? rawEHInfo = pResolver->GetRawEHInfo(); + if (rawEHInfo != null) + { + *ppRawEHInfo = rawEHInfo; + } + else + { + *ppRawEHInfo = null; + pResolver->GetEHInfo(EHNumber, parsedEHInfo); + } } catch (Exception ex) { diff --git a/src/coreclr/vm/corelib.h b/src/coreclr/vm/corelib.h index 1b2ba5a3a9f64a..0cd32a3168b6ba 100644 --- a/src/coreclr/vm/corelib.h +++ b/src/coreclr/vm/corelib.h @@ -661,8 +661,7 @@ DEFINE_CLASS(RESOLVER, System, Resolver) DEFINE_METHOD(RESOLVER, GET_JIT_CONTEXT, GetJitContext, SM_PtrResolver_PtrInt_PtrClass_PtrException_RetVoid) DEFINE_METHOD(RESOLVER, GET_CODE_INFO, GetCodeInfo, SM_PtrResolver_PtrInt_PtrInt_PtrInt_PtrArrByte_PtrException_RetVoid) DEFINE_METHOD(RESOLVER, GET_LOCALS_SIGNATURE, GetLocalsSignature, SM_PtrResolver_PtrArrByte_PtrException_RetVoid) -DEFINE_METHOD(RESOLVER, GET_EH_INFO, GetEHInfo, SM_PtrResolver_Int_PtrVoid_PtrException_RetVoid) -DEFINE_METHOD(RESOLVER, GET_RAW_EH_INFO, GetRawEHInfo, SM_PtrResolver_PtrArrByte_PtrException_RetVoid) +DEFINE_METHOD(RESOLVER, GET_EH_INFO, GetEHInfo, SM_PtrResolver_Int_PtrArrByte_PtrVoid_PtrException_RetVoid) DEFINE_METHOD(RESOLVER, GET_STRING_LITERAL, GetStringLiteral, SM_PtrResolver_Int_PtrStr_PtrException_RetVoid) DEFINE_METHOD(RESOLVER, RESOLVE_TOKEN, ResolveToken, SM_PtrResolver_Int_PtrIntPtr_PtrIntPtr_PtrIntPtr_PtrException_RetVoid) DEFINE_METHOD(RESOLVER, RESOLVE_SIGNATURE, ResolveSignature, SM_PtrResolver_Int_Int_PtrArrByte_PtrException_RetVoid) diff --git a/src/coreclr/vm/dynamicmethod.cpp b/src/coreclr/vm/dynamicmethod.cpp index fb800949eb2109..c8d7a154c4bb7a 100644 --- a/src/coreclr/vm/dynamicmethod.cpp +++ b/src/coreclr/vm/dynamicmethod.cpp @@ -1509,57 +1509,38 @@ void LCGMethodResolver::GetEHInfo(unsigned EHnumber, CORINFO_EH_CLAUSE* clause) GCX_COOP(); - // attempt to get the raw EHInfo first + struct { - struct - { - OBJECTREF Resolver; - U1ARRAYREF DataArray; - } gc; - gc.Resolver = ObjectFromHandle(m_managedResolver); - gc.DataArray = NULL; - - GCPROTECT_BEGIN(gc); - - UnmanagedCallersOnlyCaller getRawEhInfo(METHOD__RESOLVER__GET_RAW_EH_INFO); - getRawEhInfo.InvokeThrowing(&gc.Resolver, &gc.DataArray); + OBJECTREF Resolver; + U1ARRAYREF DataArray; + } gc; + gc.Resolver = ObjectFromHandle(m_managedResolver); + gc.DataArray = NULL; - if (gc.DataArray != NULL) - { - COR_ILMETHOD_SECT_EH* pEH = (COR_ILMETHOD_SECT_EH*)gc.DataArray->GetDataPtr(); - - COR_ILMETHOD_SECT_EH_CLAUSE_FAT ehClause; - const COR_ILMETHOD_SECT_EH_CLAUSE_FAT* ehInfo; - ehInfo = (COR_ILMETHOD_SECT_EH_CLAUSE_FAT*)pEH->EHClause(EHnumber, &ehClause); - - clause->Flags = (CORINFO_EH_CLAUSE_FLAGS)ehInfo->GetFlags(); - clause->TryOffset = ehInfo->GetTryOffset(); - clause->TryLength = ehInfo->GetTryLength(); - clause->HandlerOffset = ehInfo->GetHandlerOffset(); - clause->HandlerLength = ehInfo->GetHandlerLength(); - clause->ClassToken = ehInfo->GetClassToken(); - clause->FilterOffset = ehInfo->GetFilterOffset(); - return; - } + GCPROTECT_BEGIN(gc); - GCPROTECT_END(); - } + UnmanagedCallersOnlyCaller getEhInfo(METHOD__RESOLVER__GET_EH_INFO); + getEhInfo.InvokeThrowing(&gc.Resolver, EHnumber, &gc.DataArray, clause); - // failed, get the info off the ilgenerator + if (gc.DataArray != NULL) { - struct - { - OBJECTREF Resolver; - } gc; - gc.Resolver = ObjectFromHandle(m_managedResolver); - - GCPROTECT_BEGIN(gc); + // If we have raw EH info, we need to parse the clause manually. + COR_ILMETHOD_SECT_EH* pEH = (COR_ILMETHOD_SECT_EH*)gc.DataArray->GetDataPtr(); - UnmanagedCallersOnlyCaller getEhInfo(METHOD__RESOLVER__GET_EH_INFO); - getEhInfo.InvokeThrowing(&gc.Resolver, static_cast(EHnumber), clause); + COR_ILMETHOD_SECT_EH_CLAUSE_FAT ehClause; + const COR_ILMETHOD_SECT_EH_CLAUSE_FAT* ehInfo; + ehInfo = (COR_ILMETHOD_SECT_EH_CLAUSE_FAT*)pEH->EHClause(EHnumber, &ehClause); - GCPROTECT_END(); + clause->Flags = (CORINFO_EH_CLAUSE_FLAGS)ehInfo->GetFlags(); + clause->TryOffset = ehInfo->GetTryOffset(); + clause->TryLength = ehInfo->GetTryLength(); + clause->HandlerOffset = ehInfo->GetHandlerOffset(); + clause->HandlerLength = ehInfo->GetHandlerLength(); + clause->ClassToken = ehInfo->GetClassToken(); + clause->FilterOffset = ehInfo->GetFilterOffset(); } + + GCPROTECT_END(); } #endif // !DACCESS_COMPILE diff --git a/src/coreclr/vm/metasig.h b/src/coreclr/vm/metasig.h index 0c98ef22591e3f..937d0e1f7a178b 100644 --- a/src/coreclr/vm/metasig.h +++ b/src/coreclr/vm/metasig.h @@ -421,8 +421,7 @@ DEFINE_METASIG_T(SM(Int_PtrObj_PtrException_RetVoid, i P(j) P(C(EXCEPTION)), v)) DEFINE_METASIG_T(SM(PtrObj_PtrInt_PtrException_RetVoid, P(j) P(i) P(C(EXCEPTION)), v)) DEFINE_METASIG_T(SM(PtrResolver_PtrInt_PtrClass_PtrException_RetVoid, P(C(RESOLVER)) P(i) P(C(CLASS)) P(C(EXCEPTION)), v)) DEFINE_METASIG_T(SM(PtrResolver_PtrInt_PtrInt_PtrInt_PtrArrByte_PtrException_RetVoid, P(C(RESOLVER)) P(i) P(i) P(i) P(a(b)) P(C(EXCEPTION)), v)) -DEFINE_METASIG_T(SM(PtrResolver_PtrArrByte_PtrException_RetVoid, P(C(RESOLVER)) P(a(b)) P(C(EXCEPTION)), v)) -DEFINE_METASIG_T(SM(PtrResolver_Int_PtrVoid_PtrException_RetVoid, P(C(RESOLVER)) i P(v) P(C(EXCEPTION)), v)) +DEFINE_METASIG_T(SM(PtrResolver_Int_PtrArrByte_PtrVoid_PtrException_RetVoid, P(C(RESOLVER)) i P(a(b)) P(v) P(C(EXCEPTION)), v)) DEFINE_METASIG_T(SM(PtrResolver_Int_PtrIntPtr_PtrIntPtr_PtrIntPtr_PtrException_RetVoid, P(C(RESOLVER)) i P(I) P(I) P(I) P(C(EXCEPTION)), v)) DEFINE_METASIG_T(SM(PtrResolver_Int_Int_PtrArrByte_PtrException_RetVoid, P(C(RESOLVER)) i i P(a(b)) P(C(EXCEPTION)), v)) DEFINE_METASIG_T(SM(PtrResolver_Int_PtrStr_PtrException_RetVoid, P(C(RESOLVER)) i P(s) P(C(EXCEPTION)), v)) diff --git a/src/coreclr/vm/wasm/callhelpers-reverse.cpp b/src/coreclr/vm/wasm/callhelpers-reverse.cpp index 5939fa32694265..d7613a8a9d618b 100644 --- a/src/coreclr/vm/wasm/callhelpers-reverse.cpp +++ b/src/coreclr/vm/wasm/callhelpers-reverse.cpp @@ -248,19 +248,6 @@ static void Call_System_Private_CoreLib_System_Resolver_GetCodeInfo_I32_I32_I32_ ExecuteInterpretedMethodFromUnmanaged(MD_System_Private_CoreLib_System_Resolver_GetCodeInfo_I32_I32_I32_I32_I32_I32_RetVoid, (int8_t*)args, sizeof(args), nullptr, (PCODE)&Call_System_Private_CoreLib_System_Resolver_GetCodeInfo_I32_I32_I32_I32_I32_I32_RetVoid); } -static MethodDesc* MD_System_Private_CoreLib_System_Resolver_GetEHInfo_I32_I32_I32_I32_RetVoid = nullptr; -static void Call_System_Private_CoreLib_System_Resolver_GetEHInfo_I32_I32_I32_I32_RetVoid(void * arg0, int32_t arg1, void * arg2, void * arg3) -{ - int64_t args[4] = { (int64_t)arg0, (int64_t)arg1, (int64_t)arg2, (int64_t)arg3 }; - - // Lazy lookup of MethodDesc for the function export scenario. - if (!MD_System_Private_CoreLib_System_Resolver_GetEHInfo_I32_I32_I32_I32_RetVoid) - { - LookupUnmanagedCallersOnlyMethodByName("System.Resolver, System.Private.CoreLib", "GetEHInfo", &MD_System_Private_CoreLib_System_Resolver_GetEHInfo_I32_I32_I32_I32_RetVoid); - } - ExecuteInterpretedMethodFromUnmanaged(MD_System_Private_CoreLib_System_Resolver_GetEHInfo_I32_I32_I32_I32_RetVoid, (int8_t*)args, sizeof(args), nullptr, (PCODE)&Call_System_Private_CoreLib_System_Resolver_GetEHInfo_I32_I32_I32_I32_RetVoid); -} - static MethodDesc* MD_System_Private_CoreLib_Internal_Runtime_InteropServices_ComponentActivator_GetFunctionPointer_I32_I32_I32_I32_I32_I32_RetI32 = nullptr; static int32_t Call_System_Private_CoreLib_Internal_Runtime_InteropServices_ComponentActivator_GetFunctionPointer_I32_I32_I32_I32_I32_I32_RetI32(void * arg0, void * arg1, void * arg2, void * arg3, void * arg4, void * arg5) { @@ -321,19 +308,6 @@ extern "C" void SystemInteropJS_GetManagedStackTrace(void * arg0) Call_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_GetManagedStackTrace_I32_RetVoid(arg0); } -static MethodDesc* MD_System_Private_CoreLib_System_Resolver_GetRawEHInfo_I32_I32_I32_RetVoid = nullptr; -static void Call_System_Private_CoreLib_System_Resolver_GetRawEHInfo_I32_I32_I32_RetVoid(void * arg0, void * arg1, void * arg2) -{ - int64_t args[3] = { (int64_t)arg0, (int64_t)arg1, (int64_t)arg2 }; - - // Lazy lookup of MethodDesc for the function export scenario. - if (!MD_System_Private_CoreLib_System_Resolver_GetRawEHInfo_I32_I32_I32_RetVoid) - { - LookupUnmanagedCallersOnlyMethodByName("System.Resolver, System.Private.CoreLib", "GetRawEHInfo", &MD_System_Private_CoreLib_System_Resolver_GetRawEHInfo_I32_I32_I32_RetVoid); - } - ExecuteInterpretedMethodFromUnmanaged(MD_System_Private_CoreLib_System_Resolver_GetRawEHInfo_I32_I32_I32_RetVoid, (int8_t*)args, sizeof(args), nullptr, (PCODE)&Call_System_Private_CoreLib_System_Resolver_GetRawEHInfo_I32_I32_I32_RetVoid); -} - static MethodDesc* MD_System_Private_CoreLib_System_Resolver_GetStringLiteral_I32_I32_I32_I32_RetVoid = nullptr; static void Call_System_Private_CoreLib_System_Resolver_GetStringLiteral_I32_I32_I32_I32_RetVoid(void * arg0, int32_t arg1, void * arg2, void * arg3) { @@ -654,12 +628,10 @@ extern const ReverseThunkMapEntry g_ReverseThunks[] = { 2644325558, 1196551088, { &MD_System_Private_CoreLib_System_Globalization_CalendarData_EnumCalendarInfoCallback_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Globalization_CalendarData_EnumCalendarInfoCallback_I32_I32_RetVoid } } /* alternate key source: EnumCalendarInfoCallback#2:System.Private.CoreLib:System.Globalization:CalendarData */, { 2644360761, 2613312799, { &MD_System_Private_CoreLib_Internal_Runtime_InteropServices_ComActivator_GetClassFactoryForTypeInternal_I32_RetI32, (void*)&Call_System_Private_CoreLib_Internal_Runtime_InteropServices_ComActivator_GetClassFactoryForTypeInternal_I32_RetI32 } } /* alternate key source: GetClassFactoryForTypeInternal#1:System.Private.CoreLib:Internal.Runtime.InteropServices:ComActivator */, { 2644318622, 2605868264, { &MD_System_Private_CoreLib_System_Resolver_GetCodeInfo_I32_I32_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Resolver_GetCodeInfo_I32_I32_I32_I32_I32_I32_RetVoid } } /* alternate key source: GetCodeInfo#6:System.Private.CoreLib:System:Resolver */, - { 2644318258, 3509777290, { &MD_System_Private_CoreLib_System_Resolver_GetEHInfo_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Resolver_GetEHInfo_I32_I32_I32_I32_RetVoid } } /* alternate key source: GetEHInfo#4:System.Private.CoreLib:System:Resolver */, { 2644360771, 993231473, { &MD_System_Private_CoreLib_Internal_Runtime_InteropServices_ComponentActivator_GetFunctionPointer_I32_I32_I32_I32_I32_I32_RetI32, (void*)&Call_System_Private_CoreLib_Internal_Runtime_InteropServices_ComponentActivator_GetFunctionPointer_I32_I32_I32_I32_I32_I32_RetI32 } } /* alternate key source: GetFunctionPointer#6:System.Private.CoreLib:Internal.Runtime.InteropServices:ComponentActivator */, { 2644318625, 4101188193, { &MD_System_Private_CoreLib_System_Resolver_GetJitContext_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Resolver_GetJitContext_I32_I32_I32_I32_RetVoid } } /* alternate key source: GetJitContext#4:System.Private.CoreLib:System:Resolver */, { 2644318623, 2512220404, { &MD_System_Private_CoreLib_System_Resolver_GetLocalsSignature_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Resolver_GetLocalsSignature_I32_I32_I32_RetVoid } } /* alternate key source: GetLocalsSignature#3:System.Private.CoreLib:System:Resolver */, { 3685902051, 1081971317, { &MD_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_GetManagedStackTrace_I32_RetVoid, (void*)&Call_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_GetManagedStackTrace_I32_RetVoid } } /* alternate key source: GetManagedStackTrace#1:System.Runtime.InteropServices.JavaScript:System.Runtime.InteropServices.JavaScript:JavaScriptExports */, - { 2644318261, 2774706601, { &MD_System_Private_CoreLib_System_Resolver_GetRawEHInfo_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Resolver_GetRawEHInfo_I32_I32_I32_RetVoid } } /* alternate key source: GetRawEHInfo#3:System.Private.CoreLib:System:Resolver */, { 2644318620, 831291767, { &MD_System_Private_CoreLib_System_Resolver_GetStringLiteral_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Resolver_GetStringLiteral_I32_I32_I32_I32_RetVoid } } /* alternate key source: GetStringLiteral#4:System.Private.CoreLib:System:Resolver */, { 2644348538, 513042204, { &MD_System_Private_CoreLib_System_Diagnostics_Tracing_EventSource_InitializeDefaultEventSources_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Diagnostics_Tracing_EventSource_InitializeDefaultEventSources_I32_RetVoid } } /* alternate key source: InitializeDefaultEventSources#1:System.Private.CoreLib:System.Diagnostics.Tracing:EventSource */, { 2644360772, 3422156547, { &MD_System_Private_CoreLib_Internal_Runtime_InteropServices_ComponentActivator_LoadAssembly_I32_I32_I32_RetI32, (void*)&Call_System_Private_CoreLib_Internal_Runtime_InteropServices_ComponentActivator_LoadAssembly_I32_I32_I32_RetI32 } } /* alternate key source: LoadAssembly#3:System.Private.CoreLib:Internal.Runtime.InteropServices:ComponentActivator */, From da4b28c95e6e4514f9f845eb050954d1113dbfa7 Mon Sep 17 00:00:00 2001 From: Jeremy Koritzinsky Date: Mon, 2 Mar 2026 18:16:44 +0000 Subject: [PATCH 7/7] Regenerate callhelpers-reverse.cpp and Copilot feedback --- src/coreclr/vm/dynamicmethod.cpp | 12 +++ src/coreclr/vm/metasig.h | 1 + src/coreclr/vm/wasm/callhelpers-reverse.cpp | 110 ++++++++++++-------- 3 files changed, 82 insertions(+), 41 deletions(-) diff --git a/src/coreclr/vm/dynamicmethod.cpp b/src/coreclr/vm/dynamicmethod.cpp index c8d7a154c4bb7a..5939702e667534 100644 --- a/src/coreclr/vm/dynamicmethod.cpp +++ b/src/coreclr/vm/dynamicmethod.cpp @@ -1411,6 +1411,8 @@ void LCGMethodResolver::ResolveToken(mdToken token, ResolvedToken* resolvedToken handle = TypeHandle::FromTAddr(typeHandleValue); + GCPROTECT_END(); + _ASSERTE(pMD == NULL || pFD == NULL); if (handle.IsNull()) @@ -1457,6 +1459,11 @@ LCGMethodResolver::ResolveSignature( UnmanagedCallersOnlyCaller resolveSignature(METHOD__RESOLVER__RESOLVE_SIGNATURE); resolveSignature.InvokeThrowing(&gc.Resolver, static_cast(token), 0, &gc.DataArray); + if (gc.DataArray == NULL) + { + COMPlusThrow(kInvalidProgramException); + } + cbSig = gc.DataArray->GetNumComponents(); pSig = (PCCOR_SIGNATURE)m_jitTempData.New(cbSig); memcpy((void *)pSig, gc.DataArray->GetDataPtr(), cbSig); @@ -1492,6 +1499,11 @@ LCGMethodResolver::ResolveSignatureForVarArg( UnmanagedCallersOnlyCaller resolveSignature(METHOD__RESOLVER__RESOLVE_SIGNATURE); resolveSignature.InvokeThrowing(&gc.Resolver, static_cast(token), 1, &gc.DataArray); + if (gc.DataArray == NULL) + { + COMPlusThrow(kInvalidProgramException); + } + cbSig = gc.DataArray->GetNumComponents(); pSig = (PCCOR_SIGNATURE)m_jitTempData.New(cbSig); memcpy((void *)pSig, gc.DataArray->GetDataPtr(), cbSig); diff --git a/src/coreclr/vm/metasig.h b/src/coreclr/vm/metasig.h index 937d0e1f7a178b..b67a6c669c3adf 100644 --- a/src/coreclr/vm/metasig.h +++ b/src/coreclr/vm/metasig.h @@ -421,6 +421,7 @@ DEFINE_METASIG_T(SM(Int_PtrObj_PtrException_RetVoid, i P(j) P(C(EXCEPTION)), v)) DEFINE_METASIG_T(SM(PtrObj_PtrInt_PtrException_RetVoid, P(j) P(i) P(C(EXCEPTION)), v)) DEFINE_METASIG_T(SM(PtrResolver_PtrInt_PtrClass_PtrException_RetVoid, P(C(RESOLVER)) P(i) P(C(CLASS)) P(C(EXCEPTION)), v)) DEFINE_METASIG_T(SM(PtrResolver_PtrInt_PtrInt_PtrInt_PtrArrByte_PtrException_RetVoid, P(C(RESOLVER)) P(i) P(i) P(i) P(a(b)) P(C(EXCEPTION)), v)) +DEFINE_METASIG_T(SM(PtrResolver_PtrArrByte_PtrException_RetVoid, P(C(RESOLVER)) P(a(b)) P(C(EXCEPTION)), v)) DEFINE_METASIG_T(SM(PtrResolver_Int_PtrArrByte_PtrVoid_PtrException_RetVoid, P(C(RESOLVER)) i P(a(b)) P(v) P(C(EXCEPTION)), v)) DEFINE_METASIG_T(SM(PtrResolver_Int_PtrIntPtr_PtrIntPtr_PtrIntPtr_PtrException_RetVoid, P(C(RESOLVER)) i P(I) P(I) P(I) P(C(EXCEPTION)), v)) DEFINE_METASIG_T(SM(PtrResolver_Int_Int_PtrArrByte_PtrException_RetVoid, P(C(RESOLVER)) i i P(a(b)) P(C(EXCEPTION)), v)) diff --git a/src/coreclr/vm/wasm/callhelpers-reverse.cpp b/src/coreclr/vm/wasm/callhelpers-reverse.cpp index d7613a8a9d618b..65416b565c41cd 100644 --- a/src/coreclr/vm/wasm/callhelpers-reverse.cpp +++ b/src/coreclr/vm/wasm/callhelpers-reverse.cpp @@ -248,6 +248,32 @@ static void Call_System_Private_CoreLib_System_Resolver_GetCodeInfo_I32_I32_I32_ ExecuteInterpretedMethodFromUnmanaged(MD_System_Private_CoreLib_System_Resolver_GetCodeInfo_I32_I32_I32_I32_I32_I32_RetVoid, (int8_t*)args, sizeof(args), nullptr, (PCODE)&Call_System_Private_CoreLib_System_Resolver_GetCodeInfo_I32_I32_I32_I32_I32_I32_RetVoid); } +static MethodDesc* MD_System_Private_CoreLib_System_StubHelpers_MngdRefCustomMarshaler_GetCustomMarshalerInstance_I32_I32_I32_I32_I32_RetVoid = nullptr; +static void Call_System_Private_CoreLib_System_StubHelpers_MngdRefCustomMarshaler_GetCustomMarshalerInstance_I32_I32_I32_I32_I32_RetVoid(void * arg0, void * arg1, int32_t arg2, void * arg3, void * arg4) +{ + int64_t args[5] = { (int64_t)arg0, (int64_t)arg1, (int64_t)arg2, (int64_t)arg3, (int64_t)arg4 }; + + // Lazy lookup of MethodDesc for the function export scenario. + if (!MD_System_Private_CoreLib_System_StubHelpers_MngdRefCustomMarshaler_GetCustomMarshalerInstance_I32_I32_I32_I32_I32_RetVoid) + { + LookupUnmanagedCallersOnlyMethodByName("System.StubHelpers.MngdRefCustomMarshaler, System.Private.CoreLib", "GetCustomMarshalerInstance", &MD_System_Private_CoreLib_System_StubHelpers_MngdRefCustomMarshaler_GetCustomMarshalerInstance_I32_I32_I32_I32_I32_RetVoid); + } + ExecuteInterpretedMethodFromUnmanaged(MD_System_Private_CoreLib_System_StubHelpers_MngdRefCustomMarshaler_GetCustomMarshalerInstance_I32_I32_I32_I32_I32_RetVoid, (int8_t*)args, sizeof(args), nullptr, (PCODE)&Call_System_Private_CoreLib_System_StubHelpers_MngdRefCustomMarshaler_GetCustomMarshalerInstance_I32_I32_I32_I32_I32_RetVoid); +} + +static MethodDesc* MD_System_Private_CoreLib_System_Resolver_GetEHInfo_I32_I32_I32_I32_I32_RetVoid = nullptr; +static void Call_System_Private_CoreLib_System_Resolver_GetEHInfo_I32_I32_I32_I32_I32_RetVoid(void * arg0, int32_t arg1, void * arg2, void * arg3, void * arg4) +{ + int64_t args[5] = { (int64_t)arg0, (int64_t)arg1, (int64_t)arg2, (int64_t)arg3, (int64_t)arg4 }; + + // Lazy lookup of MethodDesc for the function export scenario. + if (!MD_System_Private_CoreLib_System_Resolver_GetEHInfo_I32_I32_I32_I32_I32_RetVoid) + { + LookupUnmanagedCallersOnlyMethodByName("System.Resolver, System.Private.CoreLib", "GetEHInfo", &MD_System_Private_CoreLib_System_Resolver_GetEHInfo_I32_I32_I32_I32_I32_RetVoid); + } + ExecuteInterpretedMethodFromUnmanaged(MD_System_Private_CoreLib_System_Resolver_GetEHInfo_I32_I32_I32_I32_I32_RetVoid, (int8_t*)args, sizeof(args), nullptr, (PCODE)&Call_System_Private_CoreLib_System_Resolver_GetEHInfo_I32_I32_I32_I32_I32_RetVoid); +} + static MethodDesc* MD_System_Private_CoreLib_Internal_Runtime_InteropServices_ComponentActivator_GetFunctionPointer_I32_I32_I32_I32_I32_I32_RetI32 = nullptr; static int32_t Call_System_Private_CoreLib_Internal_Runtime_InteropServices_ComponentActivator_GetFunctionPointer_I32_I32_I32_I32_I32_I32_RetI32(void * arg0, void * arg1, void * arg2, void * arg3, void * arg4, void * arg5) { @@ -612,47 +638,49 @@ static int32_t Call_System_Private_CoreLib_Internal_Runtime_InteropServices_ComA extern const ReverseThunkMapEntry g_ReverseThunks[] = { - { 2644319185, 3863938719, { &MD_System_Private_CoreLib_System_GC__RegisterNoGCRegionCallback_g__Callback_7C_72_0_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_GC__RegisterNoGCRegionCallback_g__Callback_7C_72_0_I32_RetVoid } } /* alternate key source: g__Callback|72_0#1:System.Private.CoreLib:System:GC */, - { 2644321924, 1336557534, { &MD_System_Private_CoreLib_System_Threading_ThreadPool_BackgroundJobHandler_Void_RetVoid, (void*)&Call_System_Private_CoreLib_System_Threading_ThreadPool_BackgroundJobHandler_Void_RetVoid } } /* alternate key source: BackgroundJobHandler#0:System.Private.CoreLib:System.Threading:ThreadPool */, - { 3685902048, 2901966433, { &MD_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_BindAssemblyExports_I32_RetVoid, (void*)&Call_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_BindAssemblyExports_I32_RetVoid } } /* alternate key source: BindAssemblyExports#1:System.Runtime.InteropServices.JavaScript:System.Runtime.InteropServices.JavaScript:JavaScriptExports */, - { 3685901981, 2601830388, { &MD_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_CallDelegate_I32_RetVoid, (void*)&Call_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_CallDelegate_I32_RetVoid } } /* alternate key source: CallDelegate#1:System.Runtime.InteropServices.JavaScript:System.Runtime.InteropServices.JavaScript:JavaScriptExports */, - { 3685902049, 433365813, { &MD_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_CallJSExport_I32_I32_RetVoid, (void*)&Call_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_CallJSExport_I32_I32_RetVoid } } /* alternate key source: CallJSExport#2:System.Runtime.InteropServices.JavaScript:System.Runtime.InteropServices.JavaScript:JavaScriptExports */, - { 2644318075, 1821934012, { &MD_System_Private_CoreLib_System_StartupHookProvider_CallStartupHook_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_StartupHookProvider_CallStartupHook_I32_I32_RetVoid } } /* alternate key source: CallStartupHook#2:System.Private.CoreLib:System:StartupHookProvider */, - { 2644335771, 3358042195, { &MD_System_Private_CoreLib_System_StubHelpers_MngdRefCustomMarshaler_ClearManaged_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_StubHelpers_MngdRefCustomMarshaler_ClearManaged_I32_I32_I32_I32_RetVoid } } /* alternate key source: ClearManaged#4:System.Private.CoreLib:System.StubHelpers:MngdRefCustomMarshaler */, - { 2644335773, 2311968855, { &MD_System_Private_CoreLib_System_StubHelpers_MngdRefCustomMarshaler_ClearNative_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_StubHelpers_MngdRefCustomMarshaler_ClearNative_I32_I32_I32_I32_RetVoid } } /* alternate key source: ClearNative#4:System.Private.CoreLib:System.StubHelpers:MngdRefCustomMarshaler */, - { 3685902050, 3113228365, { &MD_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_CompleteTask_I32_RetVoid, (void*)&Call_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_CompleteTask_I32_RetVoid } } /* alternate key source: CompleteTask#1:System.Runtime.InteropServices.JavaScript:System.Runtime.InteropServices.JavaScript:JavaScriptExports */, - { 2644319192, 3378852959, { &MD_System_Private_CoreLib_System_GC_ConfigCallback_I32_I32_I32_I32_I64_RetVoid, (void*)&Call_System_Private_CoreLib_System_GC_ConfigCallback_I32_I32_I32_I32_I64_RetVoid } } /* alternate key source: ConfigCallback#5:System.Private.CoreLib:System:GC */, - { 2644335775, 823296796, { &MD_System_Private_CoreLib_System_StubHelpers_MngdRefCustomMarshaler_ConvertContentsToManaged_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_StubHelpers_MngdRefCustomMarshaler_ConvertContentsToManaged_I32_I32_I32_I32_RetVoid } } /* alternate key source: ConvertContentsToManaged#4:System.Private.CoreLib:System.StubHelpers:MngdRefCustomMarshaler */, - { 2644335777, 3788988216, { &MD_System_Private_CoreLib_System_StubHelpers_MngdRefCustomMarshaler_ConvertContentsToNative_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_StubHelpers_MngdRefCustomMarshaler_ConvertContentsToNative_I32_I32_I32_I32_RetVoid } } /* alternate key source: ConvertContentsToNative#4:System.Private.CoreLib:System.StubHelpers:MngdRefCustomMarshaler */, - { 2644338054, 1243134822, { &MD_System_Private_CoreLib_System_Reflection_LoaderAllocator_Create_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Reflection_LoaderAllocator_Create_I32_I32_RetVoid } } /* alternate key source: Create#2:System.Private.CoreLib:System.Reflection:LoaderAllocator */, - { 2644325558, 1196551088, { &MD_System_Private_CoreLib_System_Globalization_CalendarData_EnumCalendarInfoCallback_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Globalization_CalendarData_EnumCalendarInfoCallback_I32_I32_RetVoid } } /* alternate key source: EnumCalendarInfoCallback#2:System.Private.CoreLib:System.Globalization:CalendarData */, - { 2644360761, 2613312799, { &MD_System_Private_CoreLib_Internal_Runtime_InteropServices_ComActivator_GetClassFactoryForTypeInternal_I32_RetI32, (void*)&Call_System_Private_CoreLib_Internal_Runtime_InteropServices_ComActivator_GetClassFactoryForTypeInternal_I32_RetI32 } } /* alternate key source: GetClassFactoryForTypeInternal#1:System.Private.CoreLib:Internal.Runtime.InteropServices:ComActivator */, - { 2644318622, 2605868264, { &MD_System_Private_CoreLib_System_Resolver_GetCodeInfo_I32_I32_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Resolver_GetCodeInfo_I32_I32_I32_I32_I32_I32_RetVoid } } /* alternate key source: GetCodeInfo#6:System.Private.CoreLib:System:Resolver */, - { 2644360771, 993231473, { &MD_System_Private_CoreLib_Internal_Runtime_InteropServices_ComponentActivator_GetFunctionPointer_I32_I32_I32_I32_I32_I32_RetI32, (void*)&Call_System_Private_CoreLib_Internal_Runtime_InteropServices_ComponentActivator_GetFunctionPointer_I32_I32_I32_I32_I32_I32_RetI32 } } /* alternate key source: GetFunctionPointer#6:System.Private.CoreLib:Internal.Runtime.InteropServices:ComponentActivator */, - { 2644318625, 4101188193, { &MD_System_Private_CoreLib_System_Resolver_GetJitContext_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Resolver_GetJitContext_I32_I32_I32_I32_RetVoid } } /* alternate key source: GetJitContext#4:System.Private.CoreLib:System:Resolver */, - { 2644318623, 2512220404, { &MD_System_Private_CoreLib_System_Resolver_GetLocalsSignature_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Resolver_GetLocalsSignature_I32_I32_I32_RetVoid } } /* alternate key source: GetLocalsSignature#3:System.Private.CoreLib:System:Resolver */, - { 3685902051, 1081971317, { &MD_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_GetManagedStackTrace_I32_RetVoid, (void*)&Call_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_GetManagedStackTrace_I32_RetVoid } } /* alternate key source: GetManagedStackTrace#1:System.Runtime.InteropServices.JavaScript:System.Runtime.InteropServices.JavaScript:JavaScriptExports */, - { 2644318620, 831291767, { &MD_System_Private_CoreLib_System_Resolver_GetStringLiteral_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Resolver_GetStringLiteral_I32_I32_I32_I32_RetVoid } } /* alternate key source: GetStringLiteral#4:System.Private.CoreLib:System:Resolver */, - { 2644348538, 513042204, { &MD_System_Private_CoreLib_System_Diagnostics_Tracing_EventSource_InitializeDefaultEventSources_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Diagnostics_Tracing_EventSource_InitializeDefaultEventSources_I32_RetVoid } } /* alternate key source: InitializeDefaultEventSources#1:System.Private.CoreLib:System.Diagnostics.Tracing:EventSource */, - { 2644360772, 3422156547, { &MD_System_Private_CoreLib_Internal_Runtime_InteropServices_ComponentActivator_LoadAssembly_I32_I32_I32_RetI32, (void*)&Call_System_Private_CoreLib_Internal_Runtime_InteropServices_ComponentActivator_LoadAssembly_I32_I32_I32_RetI32 } } /* alternate key source: LoadAssembly#3:System.Private.CoreLib:Internal.Runtime.InteropServices:ComponentActivator */, - { 2644360775, 542185314, { &MD_System_Private_CoreLib_Internal_Runtime_InteropServices_ComponentActivator_LoadAssemblyAndGetFunctionPointer_I32_I32_I32_I32_I32_I32_RetI32, (void*)&Call_System_Private_CoreLib_Internal_Runtime_InteropServices_ComponentActivator_LoadAssemblyAndGetFunctionPointer_I32_I32_I32_I32_I32_I32_RetI32 } } /* alternate key source: LoadAssemblyAndGetFunctionPointer#6:System.Private.CoreLib:Internal.Runtime.InteropServices:ComponentActivator */, - { 2644360770, 3765950975, { &MD_System_Private_CoreLib_Internal_Runtime_InteropServices_ComponentActivator_LoadAssemblyBytes_I32_I32_I32_I32_I32_I32_RetI32, (void*)&Call_System_Private_CoreLib_Internal_Runtime_InteropServices_ComponentActivator_LoadAssemblyBytes_I32_I32_I32_I32_I32_I32_RetI32 } } /* alternate key source: LoadAssemblyBytes#6:System.Private.CoreLib:Internal.Runtime.InteropServices:ComponentActivator */, - { 2644339257, 343912841, { &MD_System_Private_CoreLib_System_Runtime_InteropServices_TypeMapLazyDictionary_NewExternalTypeEntry_I32_I32_RetI32, (void*)&Call_System_Private_CoreLib_System_Runtime_InteropServices_TypeMapLazyDictionary_NewExternalTypeEntry_I32_I32_RetI32 } } /* alternate key source: NewExternalTypeEntry#2:System.Private.CoreLib:System.Runtime.InteropServices:TypeMapLazyDictionary */, - { 2644339254, 3327247096, { &MD_System_Private_CoreLib_System_Runtime_InteropServices_TypeMapLazyDictionary_NewProxyTypeEntry_I32_I32_RetI32, (void*)&Call_System_Private_CoreLib_System_Runtime_InteropServices_TypeMapLazyDictionary_NewProxyTypeEntry_I32_I32_RetI32 } } /* alternate key source: NewProxyTypeEntry#2:System.Private.CoreLib:System.Runtime.InteropServices:TypeMapLazyDictionary */, - { 2644340376, 3837429452, { &MD_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_OnAssemblyLoad_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_OnAssemblyLoad_I32_I32_RetVoid } } /* alternate key source: OnAssemblyLoad#2:System.Private.CoreLib:System.Runtime.Loader:AssemblyLoadContext */, - { 2644340375, 1632250712, { &MD_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_OnAssemblyResolve_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_OnAssemblyResolve_I32_I32_I32_I32_RetVoid } } /* alternate key source: OnAssemblyResolve#4:System.Private.CoreLib:System.Runtime.Loader:AssemblyLoadContext */, - { 2644340374, 2158495436, { &MD_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_OnResourceResolve_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_OnResourceResolve_I32_I32_I32_I32_RetVoid } } /* alternate key source: OnResourceResolve#4:System.Private.CoreLib:System.Runtime.Loader:AssemblyLoadContext */, - { 2644340377, 3572430398, { &MD_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_OnTypeResolve_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_OnTypeResolve_I32_I32_I32_I32_RetVoid } } /* alternate key source: OnTypeResolve#4:System.Private.CoreLib:System.Runtime.Loader:AssemblyLoadContext */, - { 2644360758, 4239234100, { &MD_System_Private_CoreLib_Internal_Runtime_InteropServices_ComActivator_RegisterClassForTypeInternal_I32_RetI32, (void*)&Call_System_Private_CoreLib_Internal_Runtime_InteropServices_ComActivator_RegisterClassForTypeInternal_I32_RetI32 } } /* alternate key source: RegisterClassForTypeInternal#1:System.Private.CoreLib:Internal.Runtime.InteropServices:ComActivator */, - { 3685901980, 1403522766, { &MD_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_ReleaseJSOwnedObjectByGCHandle_I32_RetVoid, (void*)&Call_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_ReleaseJSOwnedObjectByGCHandle_I32_RetVoid } } /* alternate key source: ReleaseJSOwnedObjectByGCHandle#1:System.Runtime.InteropServices.JavaScript:System.Runtime.InteropServices.JavaScript:JavaScriptExports */, - { 2644340372, 225437511, { &MD_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_Resolve_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_Resolve_I32_I32_I32_I32_RetVoid } } /* alternate key source: Resolve#4:System.Private.CoreLib:System.Runtime.Loader:AssemblyLoadContext */, - { 2644340373, 260403842, { &MD_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_ResolveSatelliteAssembly_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_ResolveSatelliteAssembly_I32_I32_I32_I32_RetVoid } } /* alternate key source: ResolveSatelliteAssembly#4:System.Private.CoreLib:System.Runtime.Loader:AssemblyLoadContext */, - { 2644318260, 426514126, { &MD_System_Private_CoreLib_System_Resolver_ResolveSignature_I32_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Resolver_ResolveSignature_I32_I32_I32_I32_I32_RetVoid } } /* alternate key source: ResolveSignature#5:System.Private.CoreLib:System:Resolver */, - { 2644318263, 2988924914, { &MD_System_Private_CoreLib_System_Resolver_ResolveToken_I32_I32_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Resolver_ResolveToken_I32_I32_I32_I32_I32_I32_RetVoid } } /* alternate key source: ResolveToken#6:System.Private.CoreLib:System:Resolver */, - { 2644340370, 2533042349, { &MD_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_ResolveUsingEvent_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_ResolveUsingEvent_I32_I32_I32_I32_RetVoid } } /* alternate key source: ResolveUsingEvent#4:System.Private.CoreLib:System.Runtime.Loader:AssemblyLoadContext */, - { 2644317641, 1963568864, { &MD_System_Private_CoreLib_System_AppContext_Setup_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_AppContext_Setup_I32_I32_I32_I32_RetVoid } } /* alternate key source: Setup#4:System.Private.CoreLib:System:AppContext */, - { 2644321594, 167179540, { &MD_System_Private_CoreLib_System_Threading_TimerQueue_TimerHandler_Void_RetVoid, (void*)&Call_System_Private_CoreLib_System_Threading_TimerQueue_TimerHandler_Void_RetVoid } } /* alternate key source: TimerHandler#0:System.Private.CoreLib:System.Threading:TimerQueue */, - { 2644360759, 2150642223, { &MD_System_Private_CoreLib_Internal_Runtime_InteropServices_ComActivator_UnregisterClassForTypeInternal_I32_RetI32, (void*)&Call_System_Private_CoreLib_Internal_Runtime_InteropServices_ComActivator_UnregisterClassForTypeInternal_I32_RetI32 } } /* alternate key source: UnregisterClassForTypeInternal#1:System.Private.CoreLib:Internal.Runtime.InteropServices:ComActivator */ + { 2644319182, 3863938719, { &MD_System_Private_CoreLib_System_GC__RegisterNoGCRegionCallback_g__Callback_7C_72_0_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_GC__RegisterNoGCRegionCallback_g__Callback_7C_72_0_I32_RetVoid } } /* alternate key source: g__Callback|72_0#1:System.Private.CoreLib:System:GC */, + { 2644321738, 1336557534, { &MD_System_Private_CoreLib_System_Threading_ThreadPool_BackgroundJobHandler_Void_RetVoid, (void*)&Call_System_Private_CoreLib_System_Threading_ThreadPool_BackgroundJobHandler_Void_RetVoid } } /* alternate key source: BackgroundJobHandler#0:System.Private.CoreLib:System.Threading:ThreadPool */, + { 3685902049, 2901966433, { &MD_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_BindAssemblyExports_I32_RetVoid, (void*)&Call_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_BindAssemblyExports_I32_RetVoid } } /* alternate key source: BindAssemblyExports#1:System.Runtime.InteropServices.JavaScript:System.Runtime.InteropServices.JavaScript:JavaScriptExports */, + { 3685902050, 2601830388, { &MD_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_CallDelegate_I32_RetVoid, (void*)&Call_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_CallDelegate_I32_RetVoid } } /* alternate key source: CallDelegate#1:System.Runtime.InteropServices.JavaScript:System.Runtime.InteropServices.JavaScript:JavaScriptExports */, + { 3685902054, 433365813, { &MD_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_CallJSExport_I32_I32_RetVoid, (void*)&Call_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_CallJSExport_I32_I32_RetVoid } } /* alternate key source: CallJSExport#2:System.Runtime.InteropServices.JavaScript:System.Runtime.InteropServices.JavaScript:JavaScriptExports */, + { 2644318069, 1821934012, { &MD_System_Private_CoreLib_System_StartupHookProvider_CallStartupHook_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_StartupHookProvider_CallStartupHook_I32_I32_RetVoid } } /* alternate key source: CallStartupHook#2:System.Private.CoreLib:System:StartupHookProvider */, + { 2644335550, 3358042195, { &MD_System_Private_CoreLib_System_StubHelpers_MngdRefCustomMarshaler_ClearManaged_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_StubHelpers_MngdRefCustomMarshaler_ClearManaged_I32_I32_I32_I32_RetVoid } } /* alternate key source: ClearManaged#4:System.Private.CoreLib:System.StubHelpers:MngdRefCustomMarshaler */, + { 2644335552, 2311968855, { &MD_System_Private_CoreLib_System_StubHelpers_MngdRefCustomMarshaler_ClearNative_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_StubHelpers_MngdRefCustomMarshaler_ClearNative_I32_I32_I32_I32_RetVoid } } /* alternate key source: ClearNative#4:System.Private.CoreLib:System.StubHelpers:MngdRefCustomMarshaler */, + { 3685902051, 3113228365, { &MD_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_CompleteTask_I32_RetVoid, (void*)&Call_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_CompleteTask_I32_RetVoid } } /* alternate key source: CompleteTask#1:System.Runtime.InteropServices.JavaScript:System.Runtime.InteropServices.JavaScript:JavaScriptExports */, + { 2644319193, 3378852959, { &MD_System_Private_CoreLib_System_GC_ConfigCallback_I32_I32_I32_I32_I64_RetVoid, (void*)&Call_System_Private_CoreLib_System_GC_ConfigCallback_I32_I32_I32_I32_I64_RetVoid } } /* alternate key source: ConfigCallback#5:System.Private.CoreLib:System:GC */, + { 2644335554, 823296796, { &MD_System_Private_CoreLib_System_StubHelpers_MngdRefCustomMarshaler_ConvertContentsToManaged_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_StubHelpers_MngdRefCustomMarshaler_ConvertContentsToManaged_I32_I32_I32_I32_RetVoid } } /* alternate key source: ConvertContentsToManaged#4:System.Private.CoreLib:System.StubHelpers:MngdRefCustomMarshaler */, + { 2644335556, 3788988216, { &MD_System_Private_CoreLib_System_StubHelpers_MngdRefCustomMarshaler_ConvertContentsToNative_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_StubHelpers_MngdRefCustomMarshaler_ConvertContentsToNative_I32_I32_I32_I32_RetVoid } } /* alternate key source: ConvertContentsToNative#4:System.Private.CoreLib:System.StubHelpers:MngdRefCustomMarshaler */, + { 2644337509, 1243134822, { &MD_System_Private_CoreLib_System_Reflection_LoaderAllocator_Create_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Reflection_LoaderAllocator_Create_I32_I32_RetVoid } } /* alternate key source: Create#2:System.Private.CoreLib:System.Reflection:LoaderAllocator */, + { 2644325218, 1196551088, { &MD_System_Private_CoreLib_System_Globalization_CalendarData_EnumCalendarInfoCallback_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Globalization_CalendarData_EnumCalendarInfoCallback_I32_I32_RetVoid } } /* alternate key source: EnumCalendarInfoCallback#2:System.Private.CoreLib:System.Globalization:CalendarData */, + { 2644360631, 2613312799, { &MD_System_Private_CoreLib_Internal_Runtime_InteropServices_ComActivator_GetClassFactoryForTypeInternal_I32_RetI32, (void*)&Call_System_Private_CoreLib_Internal_Runtime_InteropServices_ComActivator_GetClassFactoryForTypeInternal_I32_RetI32 } } /* alternate key source: GetClassFactoryForTypeInternal#1:System.Private.CoreLib:Internal.Runtime.InteropServices:ComActivator */, + { 2644318620, 2605868264, { &MD_System_Private_CoreLib_System_Resolver_GetCodeInfo_I32_I32_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Resolver_GetCodeInfo_I32_I32_I32_I32_I32_I32_RetVoid } } /* alternate key source: GetCodeInfo#6:System.Private.CoreLib:System:Resolver */, + { 2644335548, 3084636701, { &MD_System_Private_CoreLib_System_StubHelpers_MngdRefCustomMarshaler_GetCustomMarshalerInstance_I32_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_StubHelpers_MngdRefCustomMarshaler_GetCustomMarshalerInstance_I32_I32_I32_I32_I32_RetVoid } } /* alternate key source: GetCustomMarshalerInstance#5:System.Private.CoreLib:System.StubHelpers:MngdRefCustomMarshaler */, + { 2644318617, 1641343147, { &MD_System_Private_CoreLib_System_Resolver_GetEHInfo_I32_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Resolver_GetEHInfo_I32_I32_I32_I32_I32_RetVoid } } /* alternate key source: GetEHInfo#5:System.Private.CoreLib:System:Resolver */, + { 2644360641, 993231473, { &MD_System_Private_CoreLib_Internal_Runtime_InteropServices_ComponentActivator_GetFunctionPointer_I32_I32_I32_I32_I32_I32_RetI32, (void*)&Call_System_Private_CoreLib_Internal_Runtime_InteropServices_ComponentActivator_GetFunctionPointer_I32_I32_I32_I32_I32_I32_RetI32 } } /* alternate key source: GetFunctionPointer#6:System.Private.CoreLib:Internal.Runtime.InteropServices:ComponentActivator */, + { 2644318623, 4101188193, { &MD_System_Private_CoreLib_System_Resolver_GetJitContext_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Resolver_GetJitContext_I32_I32_I32_I32_RetVoid } } /* alternate key source: GetJitContext#4:System.Private.CoreLib:System:Resolver */, + { 2644318621, 2512220404, { &MD_System_Private_CoreLib_System_Resolver_GetLocalsSignature_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Resolver_GetLocalsSignature_I32_I32_I32_RetVoid } } /* alternate key source: GetLocalsSignature#3:System.Private.CoreLib:System:Resolver */, + { 3685902048, 1081971317, { &MD_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_GetManagedStackTrace_I32_RetVoid, (void*)&Call_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_GetManagedStackTrace_I32_RetVoid } } /* alternate key source: GetManagedStackTrace#1:System.Runtime.InteropServices.JavaScript:System.Runtime.InteropServices.JavaScript:JavaScriptExports */, + { 2644318618, 831291767, { &MD_System_Private_CoreLib_System_Resolver_GetStringLiteral_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Resolver_GetStringLiteral_I32_I32_I32_I32_RetVoid } } /* alternate key source: GetStringLiteral#4:System.Private.CoreLib:System:Resolver */, + { 2644348161, 513042204, { &MD_System_Private_CoreLib_System_Diagnostics_Tracing_EventSource_InitializeDefaultEventSources_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Diagnostics_Tracing_EventSource_InitializeDefaultEventSources_I32_RetVoid } } /* alternate key source: InitializeDefaultEventSources#1:System.Private.CoreLib:System.Diagnostics.Tracing:EventSource */, + { 2644360642, 3422156547, { &MD_System_Private_CoreLib_Internal_Runtime_InteropServices_ComponentActivator_LoadAssembly_I32_I32_I32_RetI32, (void*)&Call_System_Private_CoreLib_Internal_Runtime_InteropServices_ComponentActivator_LoadAssembly_I32_I32_I32_RetI32 } } /* alternate key source: LoadAssembly#3:System.Private.CoreLib:Internal.Runtime.InteropServices:ComponentActivator */, + { 2644360645, 542185314, { &MD_System_Private_CoreLib_Internal_Runtime_InteropServices_ComponentActivator_LoadAssemblyAndGetFunctionPointer_I32_I32_I32_I32_I32_I32_RetI32, (void*)&Call_System_Private_CoreLib_Internal_Runtime_InteropServices_ComponentActivator_LoadAssemblyAndGetFunctionPointer_I32_I32_I32_I32_I32_I32_RetI32 } } /* alternate key source: LoadAssemblyAndGetFunctionPointer#6:System.Private.CoreLib:Internal.Runtime.InteropServices:ComponentActivator */, + { 2644360640, 3765950975, { &MD_System_Private_CoreLib_Internal_Runtime_InteropServices_ComponentActivator_LoadAssemblyBytes_I32_I32_I32_I32_I32_I32_RetI32, (void*)&Call_System_Private_CoreLib_Internal_Runtime_InteropServices_ComponentActivator_LoadAssemblyBytes_I32_I32_I32_I32_I32_I32_RetI32 } } /* alternate key source: LoadAssemblyBytes#6:System.Private.CoreLib:Internal.Runtime.InteropServices:ComponentActivator */, + { 2644338972, 343912841, { &MD_System_Private_CoreLib_System_Runtime_InteropServices_TypeMapLazyDictionary_NewExternalTypeEntry_I32_I32_RetI32, (void*)&Call_System_Private_CoreLib_System_Runtime_InteropServices_TypeMapLazyDictionary_NewExternalTypeEntry_I32_I32_RetI32 } } /* alternate key source: NewExternalTypeEntry#2:System.Private.CoreLib:System.Runtime.InteropServices:TypeMapLazyDictionary */, + { 2644338973, 3327247096, { &MD_System_Private_CoreLib_System_Runtime_InteropServices_TypeMapLazyDictionary_NewProxyTypeEntry_I32_I32_RetI32, (void*)&Call_System_Private_CoreLib_System_Runtime_InteropServices_TypeMapLazyDictionary_NewProxyTypeEntry_I32_I32_RetI32 } } /* alternate key source: NewProxyTypeEntry#2:System.Private.CoreLib:System.Runtime.InteropServices:TypeMapLazyDictionary */, + { 2644340098, 3837429452, { &MD_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_OnAssemblyLoad_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_OnAssemblyLoad_I32_I32_RetVoid } } /* alternate key source: OnAssemblyLoad#2:System.Private.CoreLib:System.Runtime.Loader:AssemblyLoadContext */, + { 2644340097, 1632250712, { &MD_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_OnAssemblyResolve_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_OnAssemblyResolve_I32_I32_I32_I32_RetVoid } } /* alternate key source: OnAssemblyResolve#4:System.Private.CoreLib:System.Runtime.Loader:AssemblyLoadContext */, + { 2644340096, 2158495436, { &MD_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_OnResourceResolve_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_OnResourceResolve_I32_I32_I32_I32_RetVoid } } /* alternate key source: OnResourceResolve#4:System.Private.CoreLib:System.Runtime.Loader:AssemblyLoadContext */, + { 2644340099, 3572430398, { &MD_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_OnTypeResolve_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_OnTypeResolve_I32_I32_I32_I32_RetVoid } } /* alternate key source: OnTypeResolve#4:System.Private.CoreLib:System.Runtime.Loader:AssemblyLoadContext */, + { 2644360628, 4239234100, { &MD_System_Private_CoreLib_Internal_Runtime_InteropServices_ComActivator_RegisterClassForTypeInternal_I32_RetI32, (void*)&Call_System_Private_CoreLib_Internal_Runtime_InteropServices_ComActivator_RegisterClassForTypeInternal_I32_RetI32 } } /* alternate key source: RegisterClassForTypeInternal#1:System.Private.CoreLib:Internal.Runtime.InteropServices:ComActivator */, + { 3685901981, 1403522766, { &MD_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_ReleaseJSOwnedObjectByGCHandle_I32_RetVoid, (void*)&Call_System_Runtime_InteropServices_JavaScript_System_Runtime_InteropServices_JavaScript_JavaScriptExports_ReleaseJSOwnedObjectByGCHandle_I32_RetVoid } } /* alternate key source: ReleaseJSOwnedObjectByGCHandle#1:System.Runtime.InteropServices.JavaScript:System.Runtime.InteropServices.JavaScript:JavaScriptExports */, + { 2644339838, 225437511, { &MD_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_Resolve_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_Resolve_I32_I32_I32_I32_RetVoid } } /* alternate key source: Resolve#4:System.Private.CoreLib:System.Runtime.Loader:AssemblyLoadContext */, + { 2644339839, 260403842, { &MD_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_ResolveSatelliteAssembly_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_ResolveSatelliteAssembly_I32_I32_I32_I32_RetVoid } } /* alternate key source: ResolveSatelliteAssembly#4:System.Private.CoreLib:System.Runtime.Loader:AssemblyLoadContext */, + { 2644318616, 426514126, { &MD_System_Private_CoreLib_System_Resolver_ResolveSignature_I32_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Resolver_ResolveSignature_I32_I32_I32_I32_I32_RetVoid } } /* alternate key source: ResolveSignature#5:System.Private.CoreLib:System:Resolver */, + { 2644318619, 2988924914, { &MD_System_Private_CoreLib_System_Resolver_ResolveToken_I32_I32_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Resolver_ResolveToken_I32_I32_I32_I32_I32_I32_RetVoid } } /* alternate key source: ResolveToken#6:System.Private.CoreLib:System:Resolver */, + { 2644339836, 2533042349, { &MD_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_ResolveUsingEvent_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_Runtime_Loader_AssemblyLoadContext_ResolveUsingEvent_I32_I32_I32_I32_RetVoid } } /* alternate key source: ResolveUsingEvent#4:System.Private.CoreLib:System.Runtime.Loader:AssemblyLoadContext */, + { 2644317635, 1963568864, { &MD_System_Private_CoreLib_System_AppContext_Setup_I32_I32_I32_I32_RetVoid, (void*)&Call_System_Private_CoreLib_System_AppContext_Setup_I32_I32_I32_I32_RetVoid } } /* alternate key source: Setup#4:System.Private.CoreLib:System:AppContext */, + { 2644321664, 167179540, { &MD_System_Private_CoreLib_System_Threading_TimerQueue_TimerHandler_Void_RetVoid, (void*)&Call_System_Private_CoreLib_System_Threading_TimerQueue_TimerHandler_Void_RetVoid } } /* alternate key source: TimerHandler#0:System.Private.CoreLib:System.Threading:TimerQueue */, + { 2644360629, 2150642223, { &MD_System_Private_CoreLib_Internal_Runtime_InteropServices_ComActivator_UnregisterClassForTypeInternal_I32_RetI32, (void*)&Call_System_Private_CoreLib_Internal_Runtime_InteropServices_ComActivator_UnregisterClassForTypeInternal_I32_RetI32 } } /* alternate key source: UnregisterClassForTypeInternal#1:System.Private.CoreLib:Internal.Runtime.InteropServices:ComActivator */ }; const size_t g_ReverseThunksCount = sizeof(g_ReverseThunks) / sizeof(g_ReverseThunks[0]);