Skip to content

Commit

Permalink
Update .NET 9 support to use the rc1 JIT-EE interface
Browse files Browse the repository at this point in the history
nike4613 committed Sep 12, 2024
1 parent 54e33db commit 3908118
Showing 3 changed files with 68 additions and 63 deletions.
6 changes: 5 additions & 1 deletion build/extract-corjit-vtable/Program.cs
Original file line number Diff line number Diff line change
@@ -66,7 +66,11 @@
methodStr += param.Type.ToString();
}

await StdOut.WriteLineAsync(value: $"// {vtblIdx++:X2}: {methodStr})");
await StdOut.WriteLineAsync($"// {vtblIdx++:X2}: {methodStr})");
if (method.Name is "allocMem")
{
await StdOut.WriteLineAsync($"public const int AllocMemIndex = 0x{vtblIdx - 1:X};");
}
}
}

115 changes: 58 additions & 57 deletions src/MonoMod.Core/Interop/CoreCLR.V90.cs
Original file line number Diff line number Diff line change
@@ -4,7 +4,6 @@ namespace MonoMod.Core.Interop
{
internal static unsafe partial class CoreCLR
{

[SuppressMessage("Performance", "CA1812: Avoid uninstantiated internal classes",
Justification = "It must be non-static to be able to inherit others, as it does. This allows the Core*Runtime types " +
"to each reference exactly the version they represent, and the compiler automatically resolves the correct one without " +
@@ -14,7 +13,10 @@ public class V90 : V80
{
public new static class ICorJitInfoVtable
{
// src\coreclr\inc\corinfo.h:2005
// This listing is generated by build/extract-corjit-vtable.

//
// src\coreclr\inc\corinfo.h:1961
// class ICorStaticInfo
// 00: bool isIntrinsic(CORINFO_METHOD_HANDLE)
// 01: bool notifyMethodInfoUsage(CORINFO_METHOD_HANDLE)
@@ -138,70 +140,69 @@ public class V90 : V80
// 77: const char16_t * getJitTimeLogFilename()
// 78: mdMethodDef getMethodDefFromMethod(CORINFO_METHOD_HANDLE)
// 79: size_t printMethodName(CORINFO_METHOD_HANDLE, char *, size_t, size_t *)
// 7A: const char * getMethodNameFromMetadata(CORINFO_METHOD_HANDLE, const char **, const char **, const char **)
// 7A: const char * getMethodNameFromMetadata(CORINFO_METHOD_HANDLE, const char **, const char **, const char **, size_t)
// 7B: unsigned int getMethodHash(CORINFO_METHOD_HANDLE)
// 7C: bool getSystemVAmd64PassStructInRegisterDescriptor(CORINFO_CLASS_HANDLE, SYSTEMV_AMD64_CORINFO_STRUCT_REG_PASSING_DESCRIPTOR *)
// 7D: void getSwiftLowering(CORINFO_CLASS_HANDLE, CORINFO_SWIFT_LOWERING *)
// 7E: uint32_t getLoongArch64PassStructInRegisterFlags(CORINFO_CLASS_HANDLE)
// 7F: uint32_t getRISCV64PassStructInRegisterFlags(CORINFO_CLASS_HANDLE)
// 7E: void getFpStructLowering(CORINFO_CLASS_HANDLE, CORINFO_FPSTRUCT_LOWERING *)
//
// src\coreclr\inc\corinfo.h:3078
// src\coreclr\inc\corinfo.h:3039
// class ICorDynamicInfo
// 80: uint32_t getThreadTLSIndex(void **)
// 81: int32_t * getAddrOfCaptureThreadGlobal(void **)
// 82: void * getHelperFtn(CorInfoHelpFunc, void **)
// 83: void getFunctionEntryPoint(CORINFO_METHOD_HANDLE, CORINFO_CONST_LOOKUP *, CORINFO_ACCESS_FLAGS)
// 84: void getFunctionFixedEntryPoint(CORINFO_METHOD_HANDLE, bool, CORINFO_CONST_LOOKUP *)
// 85: void * getMethodSync(CORINFO_METHOD_HANDLE, void **)
// 86: CorInfoHelpFunc getLazyStringLiteralHelper(CORINFO_MODULE_HANDLE)
// 87: CORINFO_MODULE_HANDLE embedModuleHandle(CORINFO_MODULE_HANDLE, void **)
// 88: CORINFO_CLASS_HANDLE embedClassHandle(CORINFO_CLASS_HANDLE, void **)
// 89: CORINFO_METHOD_HANDLE embedMethodHandle(CORINFO_METHOD_HANDLE, void **)
// 8A: CORINFO_FIELD_HANDLE embedFieldHandle(CORINFO_FIELD_HANDLE, void **)
// 8B: void embedGenericHandle(CORINFO_RESOLVED_TOKEN *, bool, CORINFO_METHOD_HANDLE, CORINFO_GENERICHANDLE_RESULT *)
// 8C: void getLocationOfThisType(CORINFO_METHOD_HANDLE, CORINFO_LOOKUP_KIND *)
// 8D: void getAddressOfPInvokeTarget(CORINFO_METHOD_HANDLE, CORINFO_CONST_LOOKUP *)
// 8E: void * GetCookieForPInvokeCalliSig(CORINFO_SIG_INFO *, void **)
// 8F: bool canGetCookieForPInvokeCalliSig(CORINFO_SIG_INFO *)
// 90: CORINFO_JUST_MY_CODE_HANDLE getJustMyCodeHandle(CORINFO_METHOD_HANDLE, CORINFO_JUST_MY_CODE_HANDLE **)
// 91: void GetProfilingHandle(bool *, void **, bool *)
// 92: void getCallInfo(CORINFO_RESOLVED_TOKEN *, CORINFO_RESOLVED_TOKEN *, CORINFO_METHOD_HANDLE, CORINFO_CALLINFO_FLAGS, CORINFO_CALL_INFO *)
// 93: bool getStaticFieldContent(CORINFO_FIELD_HANDLE, uint8_t *, int, int, bool)
// 94: bool getObjectContent(CORINFO_OBJECT_HANDLE, uint8_t *, int, int)
// 95: CORINFO_CLASS_HANDLE getStaticFieldCurrentClass(CORINFO_FIELD_HANDLE, bool *)
// 96: CORINFO_VARARGS_HANDLE getVarArgsHandle(CORINFO_SIG_INFO *, void **)
// 97: bool canGetVarArgsHandle(CORINFO_SIG_INFO *)
// 98: InfoAccessType constructStringLiteral(CORINFO_MODULE_HANDLE, mdToken, void **)
// 99: InfoAccessType emptyStringLiteral(void **)
// 9A: uint32_t getFieldThreadLocalStoreID(CORINFO_FIELD_HANDLE, void **)
// 9B: CORINFO_METHOD_HANDLE GetDelegateCtor(CORINFO_METHOD_HANDLE, CORINFO_CLASS_HANDLE, CORINFO_METHOD_HANDLE, DelegateCtorArgs *)
// 9C: void MethodCompileComplete(CORINFO_METHOD_HANDLE)
// 9D: bool getTailCallHelpers(CORINFO_RESOLVED_TOKEN *, CORINFO_SIG_INFO *, CORINFO_GET_TAILCALL_HELPERS_FLAGS, CORINFO_TAILCALL_HELPERS *)
// 9E: bool convertPInvokeCalliToCall(CORINFO_RESOLVED_TOKEN *, bool)
// 9F: bool notifyInstructionSetUsage(CORINFO_InstructionSet, bool)
// A0: void updateEntryPointForTailCall(CORINFO_CONST_LOOKUP *)
// 7F: uint32_t getThreadTLSIndex(void **)
// 80: int32_t * getAddrOfCaptureThreadGlobal(void **)
// 81: void * getHelperFtn(CorInfoHelpFunc, void **)
// 82: void getFunctionEntryPoint(CORINFO_METHOD_HANDLE, CORINFO_CONST_LOOKUP *, CORINFO_ACCESS_FLAGS)
// 83: void getFunctionFixedEntryPoint(CORINFO_METHOD_HANDLE, bool, CORINFO_CONST_LOOKUP *)
// 84: void * getMethodSync(CORINFO_METHOD_HANDLE, void **)
// 85: CorInfoHelpFunc getLazyStringLiteralHelper(CORINFO_MODULE_HANDLE)
// 86: CORINFO_MODULE_HANDLE embedModuleHandle(CORINFO_MODULE_HANDLE, void **)
// 87: CORINFO_CLASS_HANDLE embedClassHandle(CORINFO_CLASS_HANDLE, void **)
// 88: CORINFO_METHOD_HANDLE embedMethodHandle(CORINFO_METHOD_HANDLE, void **)
// 89: CORINFO_FIELD_HANDLE embedFieldHandle(CORINFO_FIELD_HANDLE, void **)
// 8A: void embedGenericHandle(CORINFO_RESOLVED_TOKEN *, bool, CORINFO_METHOD_HANDLE, CORINFO_GENERICHANDLE_RESULT *)
// 8B: void getLocationOfThisType(CORINFO_METHOD_HANDLE, CORINFO_LOOKUP_KIND *)
// 8C: void getAddressOfPInvokeTarget(CORINFO_METHOD_HANDLE, CORINFO_CONST_LOOKUP *)
// 8D: void * GetCookieForPInvokeCalliSig(CORINFO_SIG_INFO *, void **)
// 8E: bool canGetCookieForPInvokeCalliSig(CORINFO_SIG_INFO *)
// 8F: CORINFO_JUST_MY_CODE_HANDLE getJustMyCodeHandle(CORINFO_METHOD_HANDLE, CORINFO_JUST_MY_CODE_HANDLE **)
// 90: void GetProfilingHandle(bool *, void **, bool *)
// 91: void getCallInfo(CORINFO_RESOLVED_TOKEN *, CORINFO_RESOLVED_TOKEN *, CORINFO_METHOD_HANDLE, CORINFO_CALLINFO_FLAGS, CORINFO_CALL_INFO *)
// 92: bool getStaticFieldContent(CORINFO_FIELD_HANDLE, uint8_t *, int, int, bool)
// 93: bool getObjectContent(CORINFO_OBJECT_HANDLE, uint8_t *, int, int)
// 94: CORINFO_CLASS_HANDLE getStaticFieldCurrentClass(CORINFO_FIELD_HANDLE, bool *)
// 95: CORINFO_VARARGS_HANDLE getVarArgsHandle(CORINFO_SIG_INFO *, void **)
// 96: bool canGetVarArgsHandle(CORINFO_SIG_INFO *)
// 97: InfoAccessType constructStringLiteral(CORINFO_MODULE_HANDLE, mdToken, void **)
// 98: InfoAccessType emptyStringLiteral(void **)
// 99: uint32_t getFieldThreadLocalStoreID(CORINFO_FIELD_HANDLE, void **)
// 9A: CORINFO_METHOD_HANDLE GetDelegateCtor(CORINFO_METHOD_HANDLE, CORINFO_CLASS_HANDLE, CORINFO_METHOD_HANDLE, DelegateCtorArgs *)
// 9B: void MethodCompileComplete(CORINFO_METHOD_HANDLE)
// 9C: bool getTailCallHelpers(CORINFO_RESOLVED_TOKEN *, CORINFO_SIG_INFO *, CORINFO_GET_TAILCALL_HELPERS_FLAGS, CORINFO_TAILCALL_HELPERS *)
// 9D: bool convertPInvokeCalliToCall(CORINFO_RESOLVED_TOKEN *, bool)
// 9E: bool notifyInstructionSetUsage(CORINFO_InstructionSet, bool)
// 9F: void updateEntryPointForTailCall(CORINFO_CONST_LOOKUP *)
//
// src\coreclr\inc\corjit.h:166
// class ICorJitInfo
// A1: void allocMem(AllocMemArgs *)
public const int AllocMemIndex = 0xA1;
// A2: void reserveUnwindInfo(bool, bool, uint32_t)
// A3: void allocUnwindInfo(uint8_t *, uint8_t *, uint32_t, uint32_t, uint32_t, uint8_t *, CorJitFuncKind)
// A4: void * allocGCInfo(size_t)
// A5: void setEHcount(unsigned int)
// A6: void setEHinfo(unsigned int, const CORINFO_EH_CLAUSE *)
// A7: bool logMsg(unsigned int, const char *, va_list)
// A8: int doAssert(const char *, int, const char *)
// A9: void reportFatalError(CorJitResult)
// AA: JITINTERFACE_HRESULT getPgoInstrumentationResults(CORINFO_METHOD_HANDLE, PgoInstrumentationSchema **, uint32_t *, uint8_t **, PgoSource *, bool *)
// AB: JITINTERFACE_HRESULT allocPgoInstrumentationBySchema(CORINFO_METHOD_HANDLE, PgoInstrumentationSchema *, uint32_t, uint8_t **)
// AC: void recordCallSite(uint32_t, CORINFO_SIG_INFO *, CORINFO_METHOD_HANDLE)
// AD: void recordRelocation(void *, void *, void *, uint16_t, int32_t)
// AE: uint16_t getRelocTypeHint(void *)
// AF: uint32_t getExpectedTargetArchitecture()
// B0: uint32_t getJitFlags(CORJIT_FLAGS *, uint32_t)
// A0: void allocMem(AllocMemArgs *)
public const int AllocMemIndex = 0xA0;
// A1: void reserveUnwindInfo(bool, bool, uint32_t)
// A2: void allocUnwindInfo(uint8_t *, uint8_t *, uint32_t, uint32_t, uint32_t, uint8_t *, CorJitFuncKind)
// A3: void * allocGCInfo(size_t)
// A4: void setEHcount(unsigned int)
// A5: void setEHinfo(unsigned int, const CORINFO_EH_CLAUSE *)
// A6: bool logMsg(unsigned int, const char *, va_list)
// A7: int doAssert(const char *, int, const char *)
// A8: void reportFatalError(CorJitResult)
// A9: JITINTERFACE_HRESULT getPgoInstrumentationResults(CORINFO_METHOD_HANDLE, PgoInstrumentationSchema **, uint32_t *, uint8_t **, PgoSource *, bool *)
// AA: JITINTERFACE_HRESULT allocPgoInstrumentationBySchema(CORINFO_METHOD_HANDLE, PgoInstrumentationSchema *, uint32_t, uint8_t **)
// AB: void recordCallSite(uint32_t, CORINFO_SIG_INFO *, CORINFO_METHOD_HANDLE)
// AC: void recordRelocation(void *, void *, void *, uint16_t, int32_t)
// AD: uint16_t getRelocTypeHint(void *)
// AE: uint32_t getExpectedTargetArchitecture()
// AF: uint32_t getJitFlags(CORJIT_FLAGS *, uint32_t)

public const int TotalVtableCount = 0xB1;
public const int TotalVtableCount = 0xB0;
}
}
}
10 changes: 5 additions & 5 deletions src/MonoMod.Core/Platforms/Runtimes/Core90Runtime.cs
Original file line number Diff line number Diff line change
@@ -10,12 +10,12 @@ internal class Core90Runtime : Core80Runtime
public Core90Runtime(ISystem system, IArchitecture arch) : base(system, arch) { }

// src/coreclr/inc/jiteeversionguid.h line 46
// 488a17ce-26c9-4ad0-a7b7-79bf320ea4d1
// f43f9022-8795-4791-ba55-c450d76cfeb9
private static readonly Guid JitVersionGuid = new(
0x488a17ce,
0x26c9,
0x4ad0,
0xa7, 0xb7, 0x79, 0xbf, 0x32, 0x0e, 0xa4, 0xd1
0xf43f9022,
0x8795,
0x4791,
0xba, 0x55, 0xc4, 0x50, 0xd7, 0x6c, 0xfe, 0xb9
);

protected override Guid ExpectedJitVersion => JitVersionGuid;

0 comments on commit 3908118

Please sign in to comment.