From 38b9e924d21beee14213e118dcb00756195cfbf5 Mon Sep 17 00:00:00 2001 From: EgorBo Date: Tue, 27 May 2025 21:15:06 +0200 Subject: [PATCH 1/2] Revert "Move GenTreeIntCon::gtCompileTimeHandle field to be a global map (#115542)" This reverts commit 30160aa7213eab1b183f3f1b98a8b6d0f0c955a9. --- src/coreclr/inc/corinfo.h | 13 +- src/coreclr/inc/icorjitinfoimpl_generated.h | 8 ++ src/coreclr/inc/jiteeversionguid.h | 10 +- src/coreclr/jit/ICorJitInfo_names_generated.h | 2 + .../jit/ICorJitInfo_wrapper_generated.hpp | 20 +++ src/coreclr/jit/compiler.hpp | 16 ++- src/coreclr/jit/importer.cpp | 3 + .../tools/Common/JitInterface/CorInfoImpl.cs | 6 + .../JitInterface/CorInfoImpl_generated.cs | 118 +++++++++++------- .../tools/Common/JitInterface/CorInfoTypes.cs | 3 +- .../ThunkGenerator/ThunkInput.txt | 2 + .../aot/jitinterface/jitinterface_generated.h | 22 ++++ .../tools/superpmi/superpmi-shared/lwmlist.h | 2 + .../superpmi-shared/methodcontext.cpp | 69 ++++++++++ .../superpmi/superpmi-shared/methodcontext.h | 12 +- .../superpmi-shim-collector/icorjitinfo.cpp | 16 +++ .../icorjitinfo_generated.cpp | 16 +++ .../icorjitinfo_generated.cpp | 14 +++ .../tools/superpmi/superpmi/icorjitinfo.cpp | 12 ++ src/coreclr/vm/jitinterface.cpp | 41 ++++++ 20 files changed, 351 insertions(+), 54 deletions(-) diff --git a/src/coreclr/inc/corinfo.h b/src/coreclr/inc/corinfo.h index ec2d1b54d56b17..730ffc885702e3 100644 --- a/src/coreclr/inc/corinfo.h +++ b/src/coreclr/inc/corinfo.h @@ -1206,7 +1206,8 @@ enum CorInfoAccessAllowedHelperArgType CORINFO_HELPER_ARG_TYPE_Field = 1, CORINFO_HELPER_ARG_TYPE_Method = 2, CORINFO_HELPER_ARG_TYPE_Class = 3, - CORINFO_HELPER_ARG_TYPE_Const = 4, + CORINFO_HELPER_ARG_TYPE_Module = 4, + CORINFO_HELPER_ARG_TYPE_Const = 5, }; struct CORINFO_HELPER_ARG { @@ -3137,6 +3138,11 @@ class ICorDynamicInfo : public ICorStaticInfo CORINFO_MODULE_HANDLE handle ) = 0; + virtual CORINFO_MODULE_HANDLE embedModuleHandle( + CORINFO_MODULE_HANDLE handle, + void **ppIndirection = NULL + ) = 0; + virtual CORINFO_CLASS_HANDLE embedClassHandle( CORINFO_CLASS_HANDLE handle, void **ppIndirection = NULL @@ -3147,6 +3153,11 @@ class ICorDynamicInfo : public ICorStaticInfo void **ppIndirection = NULL ) = 0; + virtual CORINFO_FIELD_HANDLE embedFieldHandle( + CORINFO_FIELD_HANDLE handle, + void **ppIndirection = NULL + ) = 0; + // Given a module scope (module), a method handle (context) and // a metadata token (metaTOK), fetch the handle // (type, field or method) associated with the token. diff --git a/src/coreclr/inc/icorjitinfoimpl_generated.h b/src/coreclr/inc/icorjitinfoimpl_generated.h index ce011a1bb5be70..73e330058f9d2d 100644 --- a/src/coreclr/inc/icorjitinfoimpl_generated.h +++ b/src/coreclr/inc/icorjitinfoimpl_generated.h @@ -556,6 +556,10 @@ void* getMethodSync( CorInfoHelpFunc getLazyStringLiteralHelper( CORINFO_MODULE_HANDLE handle) override; +CORINFO_MODULE_HANDLE embedModuleHandle( + CORINFO_MODULE_HANDLE handle, + void** ppIndirection) override; + CORINFO_CLASS_HANDLE embedClassHandle( CORINFO_CLASS_HANDLE handle, void** ppIndirection) override; @@ -564,6 +568,10 @@ CORINFO_METHOD_HANDLE embedMethodHandle( CORINFO_METHOD_HANDLE handle, void** ppIndirection) override; +CORINFO_FIELD_HANDLE embedFieldHandle( + CORINFO_FIELD_HANDLE handle, + void** ppIndirection) override; + void embedGenericHandle( CORINFO_RESOLVED_TOKEN* pResolvedToken, bool fEmbedParent, diff --git a/src/coreclr/inc/jiteeversionguid.h b/src/coreclr/inc/jiteeversionguid.h index cec97de5e8d212..7f6aa4cdc66f1e 100644 --- a/src/coreclr/inc/jiteeversionguid.h +++ b/src/coreclr/inc/jiteeversionguid.h @@ -37,11 +37,11 @@ #include -constexpr GUID JITEEVersionIdentifier = { /* bffedb4e-ed47-4df3-8156-7ad8fc8521f1 */ - 0xbffedb4e, - 0xed47, - 0x4df3, - {0x81, 0x56, 0x7a, 0xd8, 0xfc, 0x85, 0x21, 0xf1} +constexpr GUID JITEEVersionIdentifier = { /* cb23fc5b-e31d-49cb-b4e0-b5666496b4fe */ + 0xcb23fc5b, + 0xe31d, + 0x49cb, + {0xb4, 0xe0, 0xb5, 0x66, 0x64, 0x96, 0xb4, 0xfe} }; #endif // JIT_EE_VERSIONING_GUID_H diff --git a/src/coreclr/jit/ICorJitInfo_names_generated.h b/src/coreclr/jit/ICorJitInfo_names_generated.h index 9d9b6a782a4ab8..cf50808bb3efe8 100644 --- a/src/coreclr/jit/ICorJitInfo_names_generated.h +++ b/src/coreclr/jit/ICorJitInfo_names_generated.h @@ -138,8 +138,10 @@ DEF_CLR_API(getFunctionEntryPoint) DEF_CLR_API(getFunctionFixedEntryPoint) DEF_CLR_API(getMethodSync) DEF_CLR_API(getLazyStringLiteralHelper) +DEF_CLR_API(embedModuleHandle) DEF_CLR_API(embedClassHandle) DEF_CLR_API(embedMethodHandle) +DEF_CLR_API(embedFieldHandle) DEF_CLR_API(embedGenericHandle) DEF_CLR_API(getLocationOfThisType) DEF_CLR_API(getAddressOfPInvokeTarget) diff --git a/src/coreclr/jit/ICorJitInfo_wrapper_generated.hpp b/src/coreclr/jit/ICorJitInfo_wrapper_generated.hpp index adc59227ed48ac..bcc31380d5ce14 100644 --- a/src/coreclr/jit/ICorJitInfo_wrapper_generated.hpp +++ b/src/coreclr/jit/ICorJitInfo_wrapper_generated.hpp @@ -1318,6 +1318,16 @@ CorInfoHelpFunc WrapICorJitInfo::getLazyStringLiteralHelper( return temp; } +CORINFO_MODULE_HANDLE WrapICorJitInfo::embedModuleHandle( + CORINFO_MODULE_HANDLE handle, + void** ppIndirection) +{ + API_ENTER(embedModuleHandle); + CORINFO_MODULE_HANDLE temp = wrapHnd->embedModuleHandle(handle, ppIndirection); + API_LEAVE(embedModuleHandle); + return temp; +} + CORINFO_CLASS_HANDLE WrapICorJitInfo::embedClassHandle( CORINFO_CLASS_HANDLE handle, void** ppIndirection) @@ -1338,6 +1348,16 @@ CORINFO_METHOD_HANDLE WrapICorJitInfo::embedMethodHandle( return temp; } +CORINFO_FIELD_HANDLE WrapICorJitInfo::embedFieldHandle( + CORINFO_FIELD_HANDLE handle, + void** ppIndirection) +{ + API_ENTER(embedFieldHandle); + CORINFO_FIELD_HANDLE temp = wrapHnd->embedFieldHandle(handle, ppIndirection); + API_LEAVE(embedFieldHandle); + return temp; +} + void WrapICorJitInfo::embedGenericHandle( CORINFO_RESOLVED_TOKEN* pResolvedToken, bool fEmbedParent, diff --git a/src/coreclr/jit/compiler.hpp b/src/coreclr/jit/compiler.hpp index 4ea695736702f4..1a2b73d75348a2 100644 --- a/src/coreclr/jit/compiler.hpp +++ b/src/coreclr/jit/compiler.hpp @@ -1489,7 +1489,13 @@ inline GenTreeIntCon* Compiler::gtNewIconHandleNode(size_t value, GenTreeFlags f inline GenTree* Compiler::gtNewIconEmbScpHndNode(CORINFO_MODULE_HANDLE scpHnd) { - return gtNewIconEmbHndNode((void*)scpHnd, nullptr, GTF_ICON_SCOPE_HDL, scpHnd); + void *embedScpHnd, *pEmbedScpHnd; + + embedScpHnd = (void*)info.compCompHnd->embedModuleHandle(scpHnd, &pEmbedScpHnd); + + assert((!embedScpHnd) != (!pEmbedScpHnd)); + + return gtNewIconEmbHndNode(embedScpHnd, pEmbedScpHnd, GTF_ICON_SCOPE_HDL, scpHnd); } //----------------------------------------------------------------------------- @@ -1529,7 +1535,13 @@ inline GenTree* Compiler::gtNewIconEmbMethHndNode(CORINFO_METHOD_HANDLE methHnd) inline GenTree* Compiler::gtNewIconEmbFldHndNode(CORINFO_FIELD_HANDLE fldHnd) { - return gtNewIconEmbHndNode((void*)fldHnd, nullptr, GTF_ICON_FIELD_HDL, fldHnd); + void *embedFldHnd, *pEmbedFldHnd; + + embedFldHnd = (void*)info.compCompHnd->embedFieldHandle(fldHnd, &pEmbedFldHnd); + + assert((!embedFldHnd) != (!pEmbedFldHnd)); + + return gtNewIconEmbHndNode(embedFldHnd, pEmbedFldHnd, GTF_ICON_FIELD_HDL, fldHnd); } /*****************************************************************************/ diff --git a/src/coreclr/jit/importer.cpp b/src/coreclr/jit/importer.cpp index 053042ef9c9604..bca2ff8a7edc11 100644 --- a/src/coreclr/jit/importer.cpp +++ b/src/coreclr/jit/importer.cpp @@ -4384,6 +4384,9 @@ void Compiler::impInsertHelperCall(CORINFO_HELPER_DESC* helperInfo) info.compCompHnd->classMustBeLoadedBeforeCodeIsRun(helperArg.classHandle); currentArg = gtNewIconEmbClsHndNode(helperArg.classHandle); break; + case CORINFO_HELPER_ARG_TYPE_Module: + currentArg = gtNewIconEmbScpHndNode(helperArg.moduleHandle); + break; case CORINFO_HELPER_ARG_TYPE_Const: currentArg = gtNewIconNode(helperArg.constant); break; diff --git a/src/coreclr/tools/Common/JitInterface/CorInfoImpl.cs b/src/coreclr/tools/Common/JitInterface/CorInfoImpl.cs index d5974dd014f03a..6cdb10a5b17b80 100644 --- a/src/coreclr/tools/Common/JitInterface/CorInfoImpl.cs +++ b/src/coreclr/tools/Common/JitInterface/CorInfoImpl.cs @@ -3592,6 +3592,12 @@ private CorInfoHelpFunc getLazyStringLiteralHelper(CORINFO_MODULE_STRUCT_* handl return CorInfoHelpFunc.CORINFO_HELP_UNDEF; } + private CORINFO_MODULE_STRUCT_* embedModuleHandle(CORINFO_MODULE_STRUCT_* handle, ref void* ppIndirection) + { throw new NotImplementedException("embedModuleHandle"); } + + private CORINFO_FIELD_STRUCT_* embedFieldHandle(CORINFO_FIELD_STRUCT_* handle, ref void* ppIndirection) + { throw new NotImplementedException("embedFieldHandle"); } + private static CORINFO_RUNTIME_LOOKUP_KIND GetGenericRuntimeLookupKind(MethodDesc method) { if (method.RequiresInstMethodDescArg()) diff --git a/src/coreclr/tools/Common/JitInterface/CorInfoImpl_generated.cs b/src/coreclr/tools/Common/JitInterface/CorInfoImpl_generated.cs index 9463f1482371d3..8b1a6f5d8d0442 100644 --- a/src/coreclr/tools/Common/JitInterface/CorInfoImpl_generated.cs +++ b/src/coreclr/tools/Common/JitInterface/CorInfoImpl_generated.cs @@ -1989,6 +1989,21 @@ private static CorInfoHelpFunc _getLazyStringLiteralHelper(IntPtr thisHandle, In } } + [UnmanagedCallersOnly] + private static CORINFO_MODULE_STRUCT_* _embedModuleHandle(IntPtr thisHandle, IntPtr* ppException, CORINFO_MODULE_STRUCT_* handle, void** ppIndirection) + { + var _this = GetThis(thisHandle); + try + { + return _this.embedModuleHandle(handle, ref *ppIndirection); + } + catch (Exception ex) + { + *ppException = _this.AllocException(ex); + return default; + } + } + [UnmanagedCallersOnly] private static CORINFO_CLASS_STRUCT_* _embedClassHandle(IntPtr thisHandle, IntPtr* ppException, CORINFO_CLASS_STRUCT_* handle, void** ppIndirection) { @@ -2019,6 +2034,21 @@ private static CorInfoHelpFunc _getLazyStringLiteralHelper(IntPtr thisHandle, In } } + [UnmanagedCallersOnly] + private static CORINFO_FIELD_STRUCT_* _embedFieldHandle(IntPtr thisHandle, IntPtr* ppException, CORINFO_FIELD_STRUCT_* handle, void** ppIndirection) + { + var _this = GetThis(thisHandle); + try + { + return _this.embedFieldHandle(handle, ref *ppIndirection); + } + catch (Exception ex) + { + *ppException = _this.AllocException(ex); + return default; + } + } + [UnmanagedCallersOnly] private static void _embedGenericHandle(IntPtr thisHandle, IntPtr* ppException, CORINFO_RESOLVED_TOKEN* pResolvedToken, byte fEmbedParent, CORINFO_METHOD_STRUCT_* callerHandle, CORINFO_GENERICHANDLE_RESULT* pResult) { @@ -2607,7 +2637,7 @@ private static uint _getJitFlags(IntPtr thisHandle, IntPtr* ppException, CORJIT_ private static IntPtr GetUnmanagedCallbacks() { - void** callbacks = (void**)Marshal.AllocCoTaskMem(sizeof(IntPtr) * 176); + void** callbacks = (void**)Marshal.AllocCoTaskMem(sizeof(IntPtr) * 178); callbacks[0] = (delegate* unmanaged)&_isIntrinsic; callbacks[1] = (delegate* unmanaged)&_notifyMethodInfoUsage; @@ -2743,48 +2773,50 @@ private static IntPtr GetUnmanagedCallbacks() callbacks[131] = (delegate* unmanaged)&_getFunctionFixedEntryPoint; callbacks[132] = (delegate* unmanaged)&_getMethodSync; callbacks[133] = (delegate* unmanaged)&_getLazyStringLiteralHelper; - callbacks[134] = (delegate* unmanaged)&_embedClassHandle; - callbacks[135] = (delegate* unmanaged)&_embedMethodHandle; - callbacks[136] = (delegate* unmanaged)&_embedGenericHandle; - callbacks[137] = (delegate* unmanaged)&_getLocationOfThisType; - callbacks[138] = (delegate* unmanaged)&_getAddressOfPInvokeTarget; - callbacks[139] = (delegate* unmanaged)&_GetCookieForPInvokeCalliSig; - callbacks[140] = (delegate* unmanaged)&_canGetCookieForPInvokeCalliSig; - callbacks[141] = (delegate* unmanaged)&_getJustMyCodeHandle; - callbacks[142] = (delegate* unmanaged)&_GetProfilingHandle; - callbacks[143] = (delegate* unmanaged)&_getCallInfo; - callbacks[144] = (delegate* unmanaged)&_getStaticFieldContent; - callbacks[145] = (delegate* unmanaged)&_getObjectContent; - callbacks[146] = (delegate* unmanaged)&_getStaticFieldCurrentClass; - callbacks[147] = (delegate* unmanaged)&_getVarArgsHandle; - callbacks[148] = (delegate* unmanaged)&_canGetVarArgsHandle; - callbacks[149] = (delegate* unmanaged)&_constructStringLiteral; - callbacks[150] = (delegate* unmanaged)&_emptyStringLiteral; - callbacks[151] = (delegate* unmanaged)&_getFieldThreadLocalStoreID; - callbacks[152] = (delegate* unmanaged)&_GetDelegateCtor; - callbacks[153] = (delegate* unmanaged)&_MethodCompileComplete; - callbacks[154] = (delegate* unmanaged)&_getTailCallHelpers; - callbacks[155] = (delegate* unmanaged)&_getAsyncResumptionStub; - callbacks[156] = (delegate* unmanaged)&_convertPInvokeCalliToCall; - callbacks[157] = (delegate* unmanaged)&_notifyInstructionSetUsage; - callbacks[158] = (delegate* unmanaged)&_updateEntryPointForTailCall; - callbacks[159] = (delegate* unmanaged)&_allocMem; - callbacks[160] = (delegate* unmanaged)&_reserveUnwindInfo; - callbacks[161] = (delegate* unmanaged)&_allocUnwindInfo; - callbacks[162] = (delegate* unmanaged)&_allocGCInfo; - callbacks[163] = (delegate* unmanaged)&_setEHcount; - callbacks[164] = (delegate* unmanaged)&_setEHinfo; - callbacks[165] = (delegate* unmanaged)&_logMsg; - callbacks[166] = (delegate* unmanaged)&_doAssert; - callbacks[167] = (delegate* unmanaged)&_reportFatalError; - callbacks[168] = (delegate* unmanaged)&_getPgoInstrumentationResults; - callbacks[169] = (delegate* unmanaged)&_allocPgoInstrumentationBySchema; - callbacks[170] = (delegate* unmanaged)&_recordCallSite; - callbacks[171] = (delegate* unmanaged)&_recordRelocation; - callbacks[172] = (delegate* unmanaged)&_getRelocTypeHint; - callbacks[173] = (delegate* unmanaged)&_getExpectedTargetArchitecture; - callbacks[174] = (delegate* unmanaged)&_getJitFlags; - callbacks[175] = (delegate* unmanaged)&_getSpecialCopyHelper; + callbacks[134] = (delegate* unmanaged)&_embedModuleHandle; + callbacks[135] = (delegate* unmanaged)&_embedClassHandle; + callbacks[136] = (delegate* unmanaged)&_embedMethodHandle; + callbacks[137] = (delegate* unmanaged)&_embedFieldHandle; + callbacks[138] = (delegate* unmanaged)&_embedGenericHandle; + callbacks[139] = (delegate* unmanaged)&_getLocationOfThisType; + callbacks[140] = (delegate* unmanaged)&_getAddressOfPInvokeTarget; + callbacks[141] = (delegate* unmanaged)&_GetCookieForPInvokeCalliSig; + callbacks[142] = (delegate* unmanaged)&_canGetCookieForPInvokeCalliSig; + callbacks[143] = (delegate* unmanaged)&_getJustMyCodeHandle; + callbacks[144] = (delegate* unmanaged)&_GetProfilingHandle; + callbacks[145] = (delegate* unmanaged)&_getCallInfo; + callbacks[146] = (delegate* unmanaged)&_getStaticFieldContent; + callbacks[147] = (delegate* unmanaged)&_getObjectContent; + callbacks[148] = (delegate* unmanaged)&_getStaticFieldCurrentClass; + callbacks[149] = (delegate* unmanaged)&_getVarArgsHandle; + callbacks[150] = (delegate* unmanaged)&_canGetVarArgsHandle; + callbacks[151] = (delegate* unmanaged)&_constructStringLiteral; + callbacks[152] = (delegate* unmanaged)&_emptyStringLiteral; + callbacks[153] = (delegate* unmanaged)&_getFieldThreadLocalStoreID; + callbacks[154] = (delegate* unmanaged)&_GetDelegateCtor; + callbacks[155] = (delegate* unmanaged)&_MethodCompileComplete; + callbacks[156] = (delegate* unmanaged)&_getTailCallHelpers; + callbacks[157] = (delegate* unmanaged)&_getAsyncResumptionStub; + callbacks[158] = (delegate* unmanaged)&_convertPInvokeCalliToCall; + callbacks[159] = (delegate* unmanaged)&_notifyInstructionSetUsage; + callbacks[160] = (delegate* unmanaged)&_updateEntryPointForTailCall; + callbacks[161] = (delegate* unmanaged)&_allocMem; + callbacks[162] = (delegate* unmanaged)&_reserveUnwindInfo; + callbacks[163] = (delegate* unmanaged)&_allocUnwindInfo; + callbacks[164] = (delegate* unmanaged)&_allocGCInfo; + callbacks[165] = (delegate* unmanaged)&_setEHcount; + callbacks[166] = (delegate* unmanaged)&_setEHinfo; + callbacks[167] = (delegate* unmanaged)&_logMsg; + callbacks[168] = (delegate* unmanaged)&_doAssert; + callbacks[169] = (delegate* unmanaged)&_reportFatalError; + callbacks[170] = (delegate* unmanaged)&_getPgoInstrumentationResults; + callbacks[171] = (delegate* unmanaged)&_allocPgoInstrumentationBySchema; + callbacks[172] = (delegate* unmanaged)&_recordCallSite; + callbacks[173] = (delegate* unmanaged)&_recordRelocation; + callbacks[174] = (delegate* unmanaged)&_getRelocTypeHint; + callbacks[175] = (delegate* unmanaged)&_getExpectedTargetArchitecture; + callbacks[176] = (delegate* unmanaged)&_getJitFlags; + callbacks[177] = (delegate* unmanaged)&_getSpecialCopyHelper; return (IntPtr)callbacks; } diff --git a/src/coreclr/tools/Common/JitInterface/CorInfoTypes.cs b/src/coreclr/tools/Common/JitInterface/CorInfoTypes.cs index debdb6ba535d8c..9e75ee782fab1b 100644 --- a/src/coreclr/tools/Common/JitInterface/CorInfoTypes.cs +++ b/src/coreclr/tools/Common/JitInterface/CorInfoTypes.cs @@ -793,7 +793,8 @@ public enum CorInfoAccessAllowedHelperArgType CORINFO_HELPER_ARG_TYPE_Field = 1, CORINFO_HELPER_ARG_TYPE_Method = 2, CORINFO_HELPER_ARG_TYPE_Class = 3, - CORINFO_HELPER_ARG_TYPE_Const = 4, + CORINFO_HELPER_ARG_TYPE_Module = 4, + CORINFO_HELPER_ARG_TYPE_Const = 5, } public struct CORINFO_HELPER_DESC diff --git a/src/coreclr/tools/Common/JitInterface/ThunkGenerator/ThunkInput.txt b/src/coreclr/tools/Common/JitInterface/ThunkGenerator/ThunkInput.txt index 8718c1296ca2a7..6030b745b013e4 100644 --- a/src/coreclr/tools/Common/JitInterface/ThunkGenerator/ThunkInput.txt +++ b/src/coreclr/tools/Common/JitInterface/ThunkGenerator/ThunkInput.txt @@ -299,8 +299,10 @@ FUNCTIONS void getFunctionFixedEntryPoint(CORINFO_METHOD_HANDLE ftn, bool isUnsafeFunctionPointer, CORINFO_CONST_LOOKUP * pResult); void* getMethodSync(CORINFO_METHOD_HANDLE ftn, void **ppIndirection); CorInfoHelpFunc getLazyStringLiteralHelper(CORINFO_MODULE_HANDLE handle); + CORINFO_MODULE_HANDLE embedModuleHandle(CORINFO_MODULE_HANDLE handle, void **ppIndirection); CORINFO_CLASS_HANDLE embedClassHandle(CORINFO_CLASS_HANDLE handle, void **ppIndirection); CORINFO_METHOD_HANDLE embedMethodHandle(CORINFO_METHOD_HANDLE handle, void **ppIndirection); + CORINFO_FIELD_HANDLE embedFieldHandle(CORINFO_FIELD_HANDLE handle, void **ppIndirection); void embedGenericHandle(CORINFO_RESOLVED_TOKEN * pResolvedToken, bool fEmbedParent, CORINFO_METHOD_HANDLE callerHandle, CORINFO_GENERICHANDLE_RESULT * pResult); void getLocationOfThisType(CORINFO_METHOD_HANDLE context, CORINFO_LOOKUP_KIND* pLookupKind); void getAddressOfPInvokeTarget(CORINFO_METHOD_HANDLE method, CORINFO_CONST_LOOKUP *pLookup); diff --git a/src/coreclr/tools/aot/jitinterface/jitinterface_generated.h b/src/coreclr/tools/aot/jitinterface/jitinterface_generated.h index 40b33dba272995..729a09de403eac 100644 --- a/src/coreclr/tools/aot/jitinterface/jitinterface_generated.h +++ b/src/coreclr/tools/aot/jitinterface/jitinterface_generated.h @@ -145,8 +145,10 @@ struct JitInterfaceCallbacks void (* getFunctionFixedEntryPoint)(void * thisHandle, CorInfoExceptionClass** ppException, CORINFO_METHOD_HANDLE ftn, bool isUnsafeFunctionPointer, CORINFO_CONST_LOOKUP* pResult); void* (* getMethodSync)(void * thisHandle, CorInfoExceptionClass** ppException, CORINFO_METHOD_HANDLE ftn, void** ppIndirection); CorInfoHelpFunc (* getLazyStringLiteralHelper)(void * thisHandle, CorInfoExceptionClass** ppException, CORINFO_MODULE_HANDLE handle); + CORINFO_MODULE_HANDLE (* embedModuleHandle)(void * thisHandle, CorInfoExceptionClass** ppException, CORINFO_MODULE_HANDLE handle, void** ppIndirection); CORINFO_CLASS_HANDLE (* embedClassHandle)(void * thisHandle, CorInfoExceptionClass** ppException, CORINFO_CLASS_HANDLE handle, void** ppIndirection); CORINFO_METHOD_HANDLE (* embedMethodHandle)(void * thisHandle, CorInfoExceptionClass** ppException, CORINFO_METHOD_HANDLE handle, void** ppIndirection); + CORINFO_FIELD_HANDLE (* embedFieldHandle)(void * thisHandle, CorInfoExceptionClass** ppException, CORINFO_FIELD_HANDLE handle, void** ppIndirection); void (* embedGenericHandle)(void * thisHandle, CorInfoExceptionClass** ppException, CORINFO_RESOLVED_TOKEN* pResolvedToken, bool fEmbedParent, CORINFO_METHOD_HANDLE callerHandle, CORINFO_GENERICHANDLE_RESULT* pResult); void (* getLocationOfThisType)(void * thisHandle, CorInfoExceptionClass** ppException, CORINFO_METHOD_HANDLE context, CORINFO_LOOKUP_KIND* pLookupKind); void (* getAddressOfPInvokeTarget)(void * thisHandle, CorInfoExceptionClass** ppException, CORINFO_METHOD_HANDLE method, CORINFO_CONST_LOOKUP* pLookup); @@ -1496,6 +1498,16 @@ class JitInterfaceWrapper : public ICorJitInfo return temp; } + virtual CORINFO_MODULE_HANDLE embedModuleHandle( + CORINFO_MODULE_HANDLE handle, + void** ppIndirection) +{ + CorInfoExceptionClass* pException = nullptr; + CORINFO_MODULE_HANDLE temp = _callbacks->embedModuleHandle(_thisHandle, &pException, handle, ppIndirection); + if (pException != nullptr) throw pException; + return temp; +} + virtual CORINFO_CLASS_HANDLE embedClassHandle( CORINFO_CLASS_HANDLE handle, void** ppIndirection) @@ -1516,6 +1528,16 @@ class JitInterfaceWrapper : public ICorJitInfo return temp; } + virtual CORINFO_FIELD_HANDLE embedFieldHandle( + CORINFO_FIELD_HANDLE handle, + void** ppIndirection) +{ + CorInfoExceptionClass* pException = nullptr; + CORINFO_FIELD_HANDLE temp = _callbacks->embedFieldHandle(_thisHandle, &pException, handle, ppIndirection); + if (pException != nullptr) throw pException; + return temp; +} + virtual void embedGenericHandle( CORINFO_RESOLVED_TOKEN* pResolvedToken, bool fEmbedParent, diff --git a/src/coreclr/tools/superpmi/superpmi-shared/lwmlist.h b/src/coreclr/tools/superpmi/superpmi-shared/lwmlist.h index 9809f20eed116a..f81a8680ab5d74 100644 --- a/src/coreclr/tools/superpmi/superpmi-shared/lwmlist.h +++ b/src/coreclr/tools/superpmi/superpmi-shared/lwmlist.h @@ -32,8 +32,10 @@ LWM(CompileMethod, DWORD, Agnostic_CompileMethod) LWM(ConstructStringLiteral, DLD, DLD) LWM(ConvertPInvokeCalliToCall, DLD, DWORDLONG) LWM(EmbedClassHandle, DWORDLONG, DLDL) +LWM(EmbedFieldHandle, DWORDLONG, DLDL) LWM(EmbedGenericHandle, Agnostic_EmbedGenericHandle, Agnostic_CORINFO_GENERICHANDLE_RESULT) LWM(EmbedMethodHandle, DWORDLONG, DLDL) +LWM(EmbedModuleHandle, DWORDLONG, DLDL) LWM(GetThreadLocalFieldInfo, DLD, DWORD) LWM(GetThreadLocalStaticBlocksInfo, DWORD, Agnostic_GetThreadLocalStaticBlocksInfo) LWM(GetThreadLocalStaticInfo_NativeAOT, DWORDLONG, Agnostic_GetThreadStaticInfo_NativeAOT) diff --git a/src/coreclr/tools/superpmi/superpmi-shared/methodcontext.cpp b/src/coreclr/tools/superpmi/superpmi-shared/methodcontext.cpp index 4d457b00c72ad2..e414a1d0b00c21 100644 --- a/src/coreclr/tools/superpmi/superpmi-shared/methodcontext.cpp +++ b/src/coreclr/tools/superpmi/superpmi-shared/methodcontext.cpp @@ -3600,6 +3600,9 @@ void MethodContext::dmpGetFieldInfo(const Agnostic_GetFieldInfo& key, const Agno case CORINFO_HELPER_ARG_TYPE_Class: printf("{%u: cls-%016" PRIX64 "}", i, value.accessCalloutHelper.args[i].constant); break; + case CORINFO_HELPER_ARG_TYPE_Module: + printf("{%u: mod-%016" PRIX64 "}", i, value.accessCalloutHelper.args[i].constant); + break; case CORINFO_HELPER_ARG_TYPE_Const: printf("{%u: const-%016" PRIX64 "}", i, value.accessCalloutHelper.args[i].constant); break; @@ -4154,6 +4157,40 @@ CorInfoHelpFunc MethodContext::repGetCastingHelper(CORINFO_RESOLVED_TOKEN* pReso return result; } +void MethodContext::recEmbedModuleHandle(CORINFO_MODULE_HANDLE handle, + void** ppIndirection, + CORINFO_MODULE_HANDLE result) +{ + if (EmbedModuleHandle == nullptr) + EmbedModuleHandle = new LightWeightMap(); + + DLDL value; + if (ppIndirection != nullptr) + value.A = CastPointer(*ppIndirection); + else + value.A = 0; + value.B = CastHandle(result); + + DWORDLONG key = CastHandle(handle); + EmbedModuleHandle->Add(key, value); + DEBUG_REC(dmpEmbedModuleHandle(key, value)); +} +void MethodContext::dmpEmbedModuleHandle(DWORDLONG key, DLDL value) +{ + printf("EmbedModuleHandle key mod-%016" PRIX64 ", value pp-%016" PRIX64 " res-%016" PRIX64 "", key, value.A, value.B); +} +CORINFO_MODULE_HANDLE MethodContext::repEmbedModuleHandle(CORINFO_MODULE_HANDLE handle, void** ppIndirection) +{ + DWORDLONG key = CastHandle(handle); + DLDL value = LookupByKeyOrMiss(EmbedModuleHandle, key, ": key %016" PRIX64 "", key); + + DEBUG_REP(dmpEmbedModuleHandle(key, value)); + + if (ppIndirection != nullptr) + *ppIndirection = (void*)value.A; + return (CORINFO_MODULE_HANDLE)value.B; +} + void MethodContext::recEmbedClassHandle(CORINFO_CLASS_HANDLE handle, void** ppIndirection, CORINFO_CLASS_HANDLE result) { if (EmbedClassHandle == nullptr) @@ -6210,6 +6247,38 @@ void MethodContext::repGetProfilingHandle(bool* pbHookFunction, void** pProfiler *pbIndirectedHandles = value.bIndirectedHandles != 0; } +void MethodContext::recEmbedFieldHandle(CORINFO_FIELD_HANDLE handle, void** ppIndirection, CORINFO_FIELD_HANDLE result) +{ + if (EmbedFieldHandle == nullptr) + EmbedFieldHandle = new LightWeightMap(); + + DLDL value; + if (ppIndirection != nullptr) + value.A = CastPointer(*ppIndirection); + else + value.A = 0; + value.B = CastHandle(result); + + DWORDLONG key = CastHandle(handle); + EmbedFieldHandle->Add(key, value); + DEBUG_REC(dmpEmbedFieldHandle(key, value)); +} +void MethodContext::dmpEmbedFieldHandle(DWORDLONG key, DLDL value) +{ + printf("EmbedFieldHandle NYI"); +} +CORINFO_FIELD_HANDLE MethodContext::repEmbedFieldHandle(CORINFO_FIELD_HANDLE handle, void** ppIndirection) +{ + DWORDLONG key = CastHandle(handle); + DLDL value = LookupByKeyOrMiss(EmbedFieldHandle, key, ": key %016" PRIX64 "", key); + + DEBUG_REP(dmpEmbedFieldHandle(key, value)); + + if (ppIndirection != nullptr) + *ppIndirection = (void*)value.A; + return (CORINFO_FIELD_HANDLE)value.B; +} + void MethodContext::recCompareTypesForCast(CORINFO_CLASS_HANDLE fromClass, CORINFO_CLASS_HANDLE toClass, TypeCompareState result) diff --git a/src/coreclr/tools/superpmi/superpmi-shared/methodcontext.h b/src/coreclr/tools/superpmi/superpmi-shared/methodcontext.h index f3e10e48f45281..1a25a3a24c5a96 100644 --- a/src/coreclr/tools/superpmi/superpmi-shared/methodcontext.h +++ b/src/coreclr/tools/superpmi/superpmi-shared/methodcontext.h @@ -544,6 +544,10 @@ class MethodContext void dmpGetCastingHelper(const Agnostic_GetCastingHelper& key, DWORD value); CorInfoHelpFunc repGetCastingHelper(CORINFO_RESOLVED_TOKEN* pResolvedToken, bool fThrowing); + void recEmbedModuleHandle(CORINFO_MODULE_HANDLE handle, void** ppIndirection, CORINFO_MODULE_HANDLE result); + void dmpEmbedModuleHandle(DWORDLONG key, DLDL value); + CORINFO_MODULE_HANDLE repEmbedModuleHandle(CORINFO_MODULE_HANDLE handle, void** ppIndirection); + void recEmbedClassHandle(CORINFO_CLASS_HANDLE handle, void** ppIndirection, CORINFO_CLASS_HANDLE result); void dmpEmbedClassHandle(DWORDLONG key, DLDL value); CORINFO_CLASS_HANDLE repEmbedClassHandle(CORINFO_CLASS_HANDLE handle, void** ppIndirection); @@ -769,6 +773,10 @@ class MethodContext void dmpGetProfilingHandle(DWORD key, const Agnostic_GetProfilingHandle& value); void repGetProfilingHandle(bool* pbHookFunction, void** pProfilerHandle, bool* pbIndirectedHandles); + void recEmbedFieldHandle(CORINFO_FIELD_HANDLE handle, void** ppIndirection, CORINFO_FIELD_HANDLE result); + void dmpEmbedFieldHandle(DWORDLONG key, DLDL value); + CORINFO_FIELD_HANDLE repEmbedFieldHandle(CORINFO_FIELD_HANDLE handle, void** ppIndirection); + void recCompareTypesForCast(CORINFO_CLASS_HANDLE fromClass, CORINFO_CLASS_HANDLE toClass, TypeCompareState result); void dmpCompareTypesForCast(DLDL key, DWORD value); TypeCompareState repCompareTypesForCast(CORINFO_CLASS_HANDLE fromClass, CORINFO_CLASS_HANDLE toClass); @@ -999,10 +1007,10 @@ enum mcPackets //Retired3 = 14, Packet_ConstructStringLiteral = 15, Packet_EmbedClassHandle = 16, - //Packet_EmbedFieldHandle = 17, + Packet_EmbedFieldHandle = 17, Packet_EmbedGenericHandle = 18, Packet_EmbedMethodHandle = 19, - //Packet_EmbedModuleHandle = 20, + Packet_EmbedModuleHandle = 20, Packet_EmptyStringLiteral = 21, Packet_ErrorList = 22, Packet_FindCallSiteSig = 23, diff --git a/src/coreclr/tools/superpmi/superpmi-shim-collector/icorjitinfo.cpp b/src/coreclr/tools/superpmi/superpmi-shim-collector/icorjitinfo.cpp index ffa8233c028b3f..835d6a22d448de 100644 --- a/src/coreclr/tools/superpmi/superpmi-shim-collector/icorjitinfo.cpp +++ b/src/coreclr/tools/superpmi/superpmi-shim-collector/icorjitinfo.cpp @@ -1518,6 +1518,14 @@ CorInfoHelpFunc interceptor_ICJI::getLazyStringLiteralHelper(CORINFO_MODULE_HAND return temp; } +CORINFO_MODULE_HANDLE interceptor_ICJI::embedModuleHandle(CORINFO_MODULE_HANDLE handle, void** ppIndirection) +{ + mc->cr->AddCall("embedModuleHandle"); + CORINFO_MODULE_HANDLE temp = original_ICorJitInfo->embedModuleHandle(handle, ppIndirection); + mc->recEmbedModuleHandle(handle, ppIndirection, temp); + return temp; +} + CORINFO_CLASS_HANDLE interceptor_ICJI::embedClassHandle(CORINFO_CLASS_HANDLE handle, void** ppIndirection) { mc->cr->AddCall("embedClassHandle"); @@ -1534,6 +1542,14 @@ CORINFO_METHOD_HANDLE interceptor_ICJI::embedMethodHandle(CORINFO_METHOD_HANDLE return temp; } +CORINFO_FIELD_HANDLE interceptor_ICJI::embedFieldHandle(CORINFO_FIELD_HANDLE handle, void** ppIndirection) +{ + mc->cr->AddCall("embedFieldHandle"); + CORINFO_FIELD_HANDLE temp = original_ICorJitInfo->embedFieldHandle(handle, ppIndirection); + mc->recEmbedFieldHandle(handle, ppIndirection, temp); + return temp; +} + // Given a module scope (module), a method handle (context) and // a metadata token (metaTOK), fetch the handle // (type, field or method) associated with the token. diff --git a/src/coreclr/tools/superpmi/superpmi-shim-counter/icorjitinfo_generated.cpp b/src/coreclr/tools/superpmi/superpmi-shim-counter/icorjitinfo_generated.cpp index db33c699433a03..60d344324e98cd 100644 --- a/src/coreclr/tools/superpmi/superpmi-shim-counter/icorjitinfo_generated.cpp +++ b/src/coreclr/tools/superpmi/superpmi-shim-counter/icorjitinfo_generated.cpp @@ -1083,6 +1083,14 @@ CorInfoHelpFunc interceptor_ICJI::getLazyStringLiteralHelper( return original_ICorJitInfo->getLazyStringLiteralHelper(handle); } +CORINFO_MODULE_HANDLE interceptor_ICJI::embedModuleHandle( + CORINFO_MODULE_HANDLE handle, + void** ppIndirection) +{ + mcs->AddCall("embedModuleHandle"); + return original_ICorJitInfo->embedModuleHandle(handle, ppIndirection); +} + CORINFO_CLASS_HANDLE interceptor_ICJI::embedClassHandle( CORINFO_CLASS_HANDLE handle, void** ppIndirection) @@ -1099,6 +1107,14 @@ CORINFO_METHOD_HANDLE interceptor_ICJI::embedMethodHandle( return original_ICorJitInfo->embedMethodHandle(handle, ppIndirection); } +CORINFO_FIELD_HANDLE interceptor_ICJI::embedFieldHandle( + CORINFO_FIELD_HANDLE handle, + void** ppIndirection) +{ + mcs->AddCall("embedFieldHandle"); + return original_ICorJitInfo->embedFieldHandle(handle, ppIndirection); +} + void interceptor_ICJI::embedGenericHandle( CORINFO_RESOLVED_TOKEN* pResolvedToken, bool fEmbedParent, diff --git a/src/coreclr/tools/superpmi/superpmi-shim-simple/icorjitinfo_generated.cpp b/src/coreclr/tools/superpmi/superpmi-shim-simple/icorjitinfo_generated.cpp index 7b81bf6f61b362..c04554b5844f63 100644 --- a/src/coreclr/tools/superpmi/superpmi-shim-simple/icorjitinfo_generated.cpp +++ b/src/coreclr/tools/superpmi/superpmi-shim-simple/icorjitinfo_generated.cpp @@ -949,6 +949,13 @@ CorInfoHelpFunc interceptor_ICJI::getLazyStringLiteralHelper( return original_ICorJitInfo->getLazyStringLiteralHelper(handle); } +CORINFO_MODULE_HANDLE interceptor_ICJI::embedModuleHandle( + CORINFO_MODULE_HANDLE handle, + void** ppIndirection) +{ + return original_ICorJitInfo->embedModuleHandle(handle, ppIndirection); +} + CORINFO_CLASS_HANDLE interceptor_ICJI::embedClassHandle( CORINFO_CLASS_HANDLE handle, void** ppIndirection) @@ -963,6 +970,13 @@ CORINFO_METHOD_HANDLE interceptor_ICJI::embedMethodHandle( return original_ICorJitInfo->embedMethodHandle(handle, ppIndirection); } +CORINFO_FIELD_HANDLE interceptor_ICJI::embedFieldHandle( + CORINFO_FIELD_HANDLE handle, + void** ppIndirection) +{ + return original_ICorJitInfo->embedFieldHandle(handle, ppIndirection); +} + void interceptor_ICJI::embedGenericHandle( CORINFO_RESOLVED_TOKEN* pResolvedToken, bool fEmbedParent, diff --git a/src/coreclr/tools/superpmi/superpmi/icorjitinfo.cpp b/src/coreclr/tools/superpmi/superpmi/icorjitinfo.cpp index eda6cf3e66a1af..98c22710cbbb9b 100644 --- a/src/coreclr/tools/superpmi/superpmi/icorjitinfo.cpp +++ b/src/coreclr/tools/superpmi/superpmi/icorjitinfo.cpp @@ -1318,6 +1318,12 @@ CorInfoHelpFunc MyICJI::getLazyStringLiteralHelper(CORINFO_MODULE_HANDLE handle) return jitInstance->mc->repGetLazyStringLiteralHelper(handle); } +CORINFO_MODULE_HANDLE MyICJI::embedModuleHandle(CORINFO_MODULE_HANDLE handle, void** ppIndirection) +{ + jitInstance->mc->cr->AddCall("embedModuleHandle"); + return jitInstance->mc->repEmbedModuleHandle(handle, ppIndirection); +} + CORINFO_CLASS_HANDLE MyICJI::embedClassHandle(CORINFO_CLASS_HANDLE handle, void** ppIndirection) { jitInstance->mc->cr->AddCall("embedClassHandle"); @@ -1330,6 +1336,12 @@ CORINFO_METHOD_HANDLE MyICJI::embedMethodHandle(CORINFO_METHOD_HANDLE handle, vo return jitInstance->mc->repEmbedMethodHandle(handle, ppIndirection); } +CORINFO_FIELD_HANDLE MyICJI::embedFieldHandle(CORINFO_FIELD_HANDLE handle, void** ppIndirection) +{ + jitInstance->mc->cr->AddCall("embedFieldHandle"); + return jitInstance->mc->repEmbedFieldHandle(handle, ppIndirection); +} + // Given a module scope (module), a method handle (context) and // a metadata token (metaTOK), fetch the handle // (type, field or method) associated with the token. diff --git a/src/coreclr/vm/jitinterface.cpp b/src/coreclr/vm/jitinterface.cpp index 9789d68742538e..be86d45bce34f4 100644 --- a/src/coreclr/vm/jitinterface.cpp +++ b/src/coreclr/vm/jitinterface.cpp @@ -10421,6 +10421,27 @@ void CEEInfo::HandleException(struct _EXCEPTION_POINTERS *pExceptionPointers) EE_TO_JIT_TRANSITION_LEAF(); } +CORINFO_MODULE_HANDLE CEEInfo::embedModuleHandle(CORINFO_MODULE_HANDLE handle, + void **ppIndirection) +{ + CONTRACTL { + NOTHROW; + GC_NOTRIGGER; + MODE_PREEMPTIVE; + PRECONDITION(!IsDynamicScope(handle)); + } + CONTRACTL_END; + + if (ppIndirection != NULL) + *ppIndirection = NULL; + + JIT_TO_EE_TRANSITION_LEAF(); + + EE_TO_JIT_TRANSITION_LEAF(); + + return handle; +} + CORINFO_CLASS_HANDLE CEEInfo::embedClassHandle(CORINFO_CLASS_HANDLE handle, void **ppIndirection) { @@ -10441,6 +10462,26 @@ CORINFO_CLASS_HANDLE CEEInfo::embedClassHandle(CORINFO_CLASS_HANDLE handle, return handle; } +CORINFO_FIELD_HANDLE CEEInfo::embedFieldHandle(CORINFO_FIELD_HANDLE handle, + void **ppIndirection) +{ + CONTRACTL { + NOTHROW; + GC_NOTRIGGER; + MODE_PREEMPTIVE; + } + CONTRACTL_END; + + if (ppIndirection != NULL) + *ppIndirection = NULL; + + JIT_TO_EE_TRANSITION_LEAF(); + + EE_TO_JIT_TRANSITION_LEAF(); + + return handle; +} + CORINFO_METHOD_HANDLE CEEInfo::embedMethodHandle(CORINFO_METHOD_HANDLE handle, void **ppIndirection) { From 4a5450c6d97e73aae951999b31ba6ac95bc27435 Mon Sep 17 00:00:00 2001 From: EgorBo Date: Tue, 27 May 2025 21:20:37 +0200 Subject: [PATCH 2/2] Bump guid --- src/coreclr/inc/jiteeversionguid.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/coreclr/inc/jiteeversionguid.h b/src/coreclr/inc/jiteeversionguid.h index 7f6aa4cdc66f1e..c5ec39d209c932 100644 --- a/src/coreclr/inc/jiteeversionguid.h +++ b/src/coreclr/inc/jiteeversionguid.h @@ -37,11 +37,11 @@ #include -constexpr GUID JITEEVersionIdentifier = { /* cb23fc5b-e31d-49cb-b4e0-b5666496b4fe */ - 0xcb23fc5b, - 0xe31d, - 0x49cb, - {0xb4, 0xe0, 0xb5, 0x66, 0x64, 0x96, 0xb4, 0xfe} +constexpr GUID JITEEVersionIdentifier = { /* f21d9c39-8d24-4e4d-86aa-7b883aecf97f */ + 0xf21d9c39, + 0x8d24, + 0x4e4d, + {0x86, 0xaa, 0x7b, 0x88, 0x3a, 0xec, 0xf9, 0x7f} }; #endif // JIT_EE_VERSIONING_GUID_H