Skip to content

Commit e5a0829

Browse files
[NativeAOT-LLVM] Migrate runtime imports (FCalls) and exports to the managed calling convetion (dotnet#2587)
* Move FCalls and runtime exports to the managed callling convetion There are two benefits: 1) CQ - no need to 'save' the shadow stack explicitly. 2) Uniformity - this is the same scheme as upstream uses. Additionally, this will allows us to implement the shadow stack saving via the transition frames, if we so choose. * Remove CORINFO_HELP_LLVM_SET_SHADOW_STACK_TOP * Fix the definition of RhGetCurrentThunkContext * Reword comment * Fix a typo Co-authored-by: yowl <[email protected]> --------- Co-authored-by: yowl <[email protected]>
1 parent 198b7eb commit e5a0829

File tree

34 files changed

+459
-375
lines changed

34 files changed

+459
-375
lines changed

src/coreclr/inc/corinfo.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -670,7 +670,6 @@ enum CorInfoHelpFunc
670670
CORINFO_HELP_DISPATCH_INDIRECT_CALL, // CFG: Validate and dispatch to pointer
671671

672672
CORINFO_HELP_LLVM_GET_OR_INIT_SHADOW_STACK_TOP,
673-
CORINFO_HELP_LLVM_SET_SHADOW_STACK_TOP,
674673
CORINFO_HELP_LLVM_EH_CATCH,
675674
CORINFO_HELP_LLVM_EH_POP_UNWOUND_VIRTUAL_FRAMES,
676675
CORINFO_HELP_LLVM_EH_PUSH_VIRTUAL_UNWIND_FRAME,

src/coreclr/inc/jithelpers.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,6 @@
361361
#endif
362362

363363
JITHELPER(CORINFO_HELP_LLVM_GET_OR_INIT_SHADOW_STACK_TOP, NULL, CORINFO_HELP_SIG_UNDEF)
364-
JITHELPER(CORINFO_HELP_LLVM_SET_SHADOW_STACK_TOP, NULL, CORINFO_HELP_SIG_UNDEF)
365364
JITHELPER(CORINFO_HELP_LLVM_EH_CATCH, NULL, CORINFO_HELP_SIG_UNDEF)
366365
JITHELPER(CORINFO_HELP_LLVM_EH_POP_UNWOUND_VIRTUAL_FRAMES, NULL, CORINFO_HELP_SIG_UNDEF)
367366
JITHELPER(CORINFO_HELP_LLVM_EH_PUSH_VIRTUAL_UNWIND_FRAME, NULL, CORINFO_HELP_SIG_UNDEF)

src/coreclr/jit/llvm.cpp

Lines changed: 44 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ enum class EEApiId
2323
GetMangledFilterFuncletName,
2424
GetSignatureForMethodSymbol,
2525
AddCodeReloc,
26-
IsRuntimeImport,
2726
GetPrimitiveTypeForTrivialWasmStruct,
2827
GetTypeDescriptor,
2928
GetAlternativeFunctionName,
@@ -174,31 +173,6 @@ GCInfo* Llvm::getGCInfo()
174173
return _gcInfo;
175174
}
176175

177-
bool Llvm::callRequiresShadowStackSave(const GenTreeCall* call) const
178-
{
179-
// In general, if the call is itself not managed (does not have a shadow stack argument) **and** may call
180-
// back into managed code, we need to save the shadow stack pointer, so that the RPI frame can pick it up.
181-
// Another case where the save/restore is required is when calling into native runtime code that can trigger
182-
// a GC (canonical example: allocators), to communicate shadow stack bounds to the roots scan.
183-
//
184-
if (call->IsHelperCall())
185-
{
186-
return helperCallRequiresShadowStackSave(call->GetHelperNum());
187-
}
188-
189-
// SPGCT calls are assumed to never RPI by contract.
190-
return !callHasShadowStackArg(call) && !call->IsSuppressGCTransition();
191-
}
192-
193-
bool Llvm::helperCallRequiresShadowStackSave(CorInfoHelpFunc helperFunc) const
194-
{
195-
// Save/restore is needed if the helper doesn't have a shadow stack argument, unless we know it won't call
196-
// back into managed code or has special semantics. TODO-LLVM-CQ: mark (make, if required) more helpers
197-
// "HFIF_NO_RPI_OR_GC".
198-
unsigned helperFlags = getHelperFuncInfo(helperFunc).Flags;
199-
return (helperFlags & (HFIF_SS_ARG | HFIF_NO_RPI_OR_GC)) == HFIF_NONE;
200-
}
201-
202176
bool Llvm::callHasShadowStackArg(const GenTreeCall* call) const
203177
{
204178
return callHasManagedCallingConvention(call);
@@ -216,12 +190,6 @@ bool Llvm::callHasManagedCallingConvention(const GenTreeCall* call) const
216190
return helperCallHasManagedCallingConvention(call->GetHelperNum());
217191
}
218192

219-
// Runtime imports are effectively unmanaged but are not tracked as such.
220-
if ((call->gtCallType == CT_USER_FUNC) && IsRuntimeImport(call->gtCallMethHnd))
221-
{
222-
return false;
223-
}
224-
225193
return !call->IsUnmanaged();
226194
}
227195

@@ -275,10 +243,10 @@ bool Llvm::helperCallMayPhysicallyThrow(CorInfoHelpFunc helperFunc) const
275243
{ FUNC(CORINFO_HELP_UMOD) CORINFO_TYPE_UINT, { CORINFO_TYPE_UINT, CORINFO_TYPE_UINT }, HFIF_SS_ARG },
276244

277245
// Implemented in "Runtime\MathHelpers.cpp".
278-
{ FUNC(CORINFO_HELP_LLSH) CORINFO_TYPE_LONG, { CORINFO_TYPE_LONG, CORINFO_TYPE_INT } },
279-
{ FUNC(CORINFO_HELP_LRSH) CORINFO_TYPE_LONG, { CORINFO_TYPE_LONG, CORINFO_TYPE_INT } },
280-
{ FUNC(CORINFO_HELP_LRSZ) CORINFO_TYPE_LONG, { CORINFO_TYPE_LONG, CORINFO_TYPE_INT } },
281-
{ FUNC(CORINFO_HELP_LMUL) CORINFO_TYPE_LONG, { CORINFO_TYPE_LONG, CORINFO_TYPE_LONG } },
246+
{ FUNC(CORINFO_HELP_LLSH) CORINFO_TYPE_LONG, { CORINFO_TYPE_LONG, CORINFO_TYPE_INT }, HFIF_SS_ARG },
247+
{ FUNC(CORINFO_HELP_LRSH) CORINFO_TYPE_LONG, { CORINFO_TYPE_LONG, CORINFO_TYPE_INT }, HFIF_SS_ARG },
248+
{ FUNC(CORINFO_HELP_LRSZ) CORINFO_TYPE_LONG, { CORINFO_TYPE_LONG, CORINFO_TYPE_INT }, HFIF_SS_ARG },
249+
{ FUNC(CORINFO_HELP_LMUL) CORINFO_TYPE_LONG, { CORINFO_TYPE_LONG, CORINFO_TYPE_LONG }, HFIF_SS_ARG },
282250

283251
// Implemented in "CoreLib\src\Internal\Runtime\CompilerHelpers\MathHelpers.cs".
284252
{ FUNC(CORINFO_HELP_LMUL_OVF) CORINFO_TYPE_LONG, { CORINFO_TYPE_LONG, CORINFO_TYPE_LONG }, HFIF_SS_ARG },
@@ -289,36 +257,36 @@ bool Llvm::helperCallMayPhysicallyThrow(CorInfoHelpFunc helperFunc) const
289257
{ FUNC(CORINFO_HELP_ULMOD) CORINFO_TYPE_ULONG, { CORINFO_TYPE_ULONG, CORINFO_TYPE_ULONG }, HFIF_SS_ARG },
290258

291259
// Implemented in "Runtime\MathHelpers.cpp".
292-
{ FUNC(CORINFO_HELP_LNG2DBL) CORINFO_TYPE_DOUBLE, { CORINFO_TYPE_LONG } },
293-
{ FUNC(CORINFO_HELP_ULNG2DBL) CORINFO_TYPE_DOUBLE, { CORINFO_TYPE_ULONG } },
294-
{ FUNC(CORINFO_HELP_DBL2INT) CORINFO_TYPE_INT, { CORINFO_TYPE_DOUBLE } },
260+
{ FUNC(CORINFO_HELP_LNG2DBL) CORINFO_TYPE_DOUBLE, { CORINFO_TYPE_LONG }, HFIF_SS_ARG },
261+
{ FUNC(CORINFO_HELP_ULNG2DBL) CORINFO_TYPE_DOUBLE, { CORINFO_TYPE_ULONG }, HFIF_SS_ARG },
262+
{ FUNC(CORINFO_HELP_DBL2INT) CORINFO_TYPE_INT, { CORINFO_TYPE_DOUBLE }, HFIF_SS_ARG },
295263

296264
// Implemented in "CoreLib\src\Internal\Runtime\CompilerHelpers\MathHelpers.cs".
297265
{ FUNC(CORINFO_HELP_DBL2INT_OVF) CORINFO_TYPE_INT, { CORINFO_TYPE_DOUBLE }, HFIF_SS_ARG },
298266

299267
// Implemented in "Runtime\MathHelpers.cpp".
300-
{ FUNC(CORINFO_HELP_DBL2LNG) CORINFO_TYPE_LONG, { CORINFO_TYPE_DOUBLE } },
268+
{ FUNC(CORINFO_HELP_DBL2LNG) CORINFO_TYPE_LONG, { CORINFO_TYPE_DOUBLE }, HFIF_SS_ARG },
301269

302270
// Implemented in "CoreLib\src\Internal\Runtime\CompilerHelpers\MathHelpers.cs".
303271
{ FUNC(CORINFO_HELP_DBL2LNG_OVF) CORINFO_TYPE_LONG, { CORINFO_TYPE_DOUBLE }, HFIF_SS_ARG },
304272

305273
// Implemented in "Runtime\MathHelpers.cpp".
306-
{ FUNC(CORINFO_HELP_DBL2UINT) CORINFO_TYPE_UINT, { CORINFO_TYPE_DOUBLE } },
274+
{ FUNC(CORINFO_HELP_DBL2UINT) CORINFO_TYPE_UINT, { CORINFO_TYPE_DOUBLE }, HFIF_SS_ARG },
307275

308276
// Implemented in "CoreLib\src\Internal\Runtime\CompilerHelpers\MathHelpers.cs".
309277
{ FUNC(CORINFO_HELP_DBL2UINT_OVF) CORINFO_TYPE_UINT, { CORINFO_TYPE_DOUBLE }, HFIF_SS_ARG },
310278

311279
// Implemented in "Runtime\MathHelpers.cpp".
312-
{ FUNC(CORINFO_HELP_DBL2ULNG) CORINFO_TYPE_ULONG, { CORINFO_TYPE_DOUBLE } },
280+
{ FUNC(CORINFO_HELP_DBL2ULNG) CORINFO_TYPE_ULONG, { CORINFO_TYPE_DOUBLE }, HFIF_SS_ARG },
313281

314282
// Implemented in "CoreLib\src\Internal\Runtime\CompilerHelpers\MathHelpers.cs".
315283
{ FUNC(CORINFO_HELP_DBL2ULNG_OVF) CORINFO_TYPE_ULONG, { CORINFO_TYPE_DOUBLE }, HFIF_SS_ARG },
316284

317-
// Implemented in "Runtime\MathHelpers.cpp".
318-
{ FUNC(CORINFO_HELP_FLTREM) CORINFO_TYPE_FLOAT, { CORINFO_TYPE_FLOAT, CORINFO_TYPE_FLOAT } },
319-
{ FUNC(CORINFO_HELP_DBLREM) CORINFO_TYPE_DOUBLE, { CORINFO_TYPE_DOUBLE, CORINFO_TYPE_DOUBLE } },
320-
{ FUNC(CORINFO_HELP_FLTROUND) CORINFO_TYPE_FLOAT, { CORINFO_TYPE_FLOAT } },
321-
{ FUNC(CORINFO_HELP_DBLROUND) CORINFO_TYPE_DOUBLE, { CORINFO_TYPE_DOUBLE } },
285+
// Implemented as "fmodf"/"fmod".
286+
{ FUNC(CORINFO_HELP_FLTREM) CORINFO_TYPE_FLOAT, { CORINFO_TYPE_FLOAT, CORINFO_TYPE_FLOAT }, HFIF_NO_RPI_OR_GC },
287+
{ FUNC(CORINFO_HELP_DBLREM) CORINFO_TYPE_DOUBLE, { CORINFO_TYPE_DOUBLE, CORINFO_TYPE_DOUBLE }, HFIF_NO_RPI_OR_GC },
288+
{ FUNC(CORINFO_HELP_FLTROUND) },
289+
{ FUNC(CORINFO_HELP_DBLROUND) },
322290

323291
// Runtime export, implemented in "Runtime.Base\src\System\Runtime\RuntimeExports.cs".
324292
{ FUNC(CORINFO_HELP_NEWFAST) CORINFO_TYPE_CLASS, { CORINFO_TYPE_PTR }, HFIF_SS_ARG },
@@ -380,7 +348,7 @@ bool Llvm::helperCallMayPhysicallyThrow(CorInfoHelpFunc helperFunc) const
380348
{ FUNC(CORINFO_HELP_RETHROW) CORINFO_TYPE_VOID, { CORINFO_TYPE_PTR }, HFIF_SS_ARG },
381349

382350
// Implemented in "Runtime\MiscHelpers.cpp".
383-
{ FUNC(CORINFO_HELP_USER_BREAKPOINT) CORINFO_TYPE_VOID, { } },
351+
{ FUNC(CORINFO_HELP_USER_BREAKPOINT) CORINFO_TYPE_VOID, { }, HFIF_SS_ARG},
384352

385353
// Implemented in "Runtime.Base\src\System\ThrowHelpers.cs".
386354
{ FUNC(CORINFO_HELP_RNGCHKFAIL) CORINFO_TYPE_VOID, { }, HFIF_SS_ARG },
@@ -393,7 +361,7 @@ bool Llvm::helperCallMayPhysicallyThrow(CorInfoHelpFunc helperFunc) const
393361
{ FUNC(CORINFO_HELP_VERIFICATION) },
394362

395363
// Implemented in "Runtime\EHHelpers.cpp".
396-
{ FUNC(CORINFO_HELP_FAIL_FAST) CORINFO_TYPE_VOID, { }, HFIF_NO_RPI_OR_GC },
364+
{ FUNC(CORINFO_HELP_FAIL_FAST) CORINFO_TYPE_VOID, { }, HFIF_SS_ARG | HFIF_NO_RPI_OR_GC },
397365

398366
// NYI in NativeAOT.
399367
{ FUNC(CORINFO_HELP_METHOD_ACCESS_EXCEPTION) },
@@ -415,10 +383,10 @@ bool Llvm::helperCallMayPhysicallyThrow(CorInfoHelpFunc helperFunc) const
415383
{ FUNC(CORINFO_HELP_STOP_FOR_GC) },
416384

417385
// (Not) implemented in "Runtime\portable.cpp".
418-
{ FUNC(CORINFO_HELP_POLL_GC) CORINFO_TYPE_VOID, { } },
386+
{ FUNC(CORINFO_HELP_POLL_GC) CORINFO_TYPE_VOID, { }, HFIF_SS_ARG},
419387

420388
// Debug-only helpers, implemented in "Runtime\wasm\GcStress.cpp".
421-
{ FUNC(CORINFO_HELP_STRESS_GC) CORINFO_TYPE_BYREF, { CORINFO_TYPE_BYREF, CORINFO_TYPE_PTR } },
389+
{ FUNC(CORINFO_HELP_STRESS_GC) CORINFO_TYPE_BYREF, { CORINFO_TYPE_BYREF, CORINFO_TYPE_PTR }, HFIF_SS_ARG },
422390
{ FUNC(CORINFO_HELP_CHECK_OBJ) CORINFO_TYPE_CLASS, { CORINFO_TYPE_CLASS }, HFIF_NO_RPI_OR_GC },
423391

424392
// Write barriers, implemented in "Runtime\portable.cpp".
@@ -493,7 +461,7 @@ bool Llvm::helperCallMayPhysicallyThrow(CorInfoHelpFunc helperFunc) const
493461
{ FUNC(CORINFO_HELP_MEMCPY) CORINFO_TYPE_VOID, { CORINFO_TYPE_PTR, CORINFO_TYPE_PTR, CORINFO_TYPE_NATIVEUINT }, HFIF_SS_ARG },
494462

495463
// Implemented as plain "memset".
496-
{ FUNC(CORINFO_HELP_NATIVE_MEMSET) CORINFO_TYPE_VOID, { CORINFO_TYPE_PTR, CORINFO_TYPE_INT, CORINFO_TYPE_NATIVEUINT } },
464+
{ FUNC(CORINFO_HELP_NATIVE_MEMSET) CORINFO_TYPE_VOID, { CORINFO_TYPE_PTR, CORINFO_TYPE_INT, CORINFO_TYPE_NATIVEUINT }, HFIF_NO_RPI_OR_GC },
497465

498466
// Not used in NativeAOT.
499467
{ FUNC(CORINFO_HELP_RUNTIMEHANDLE_METHOD) },
@@ -528,7 +496,7 @@ bool Llvm::helperCallMayPhysicallyThrow(CorInfoHelpFunc helperFunc) const
528496
{ FUNC(CORINFO_HELP_READYTORUN_THREADSTATIC_BASE) CORINFO_TYPE_PTR, { }, HFIF_SS_ARG },
529497
{ FUNC(CORINFO_HELP_READYTORUN_THREADSTATIC_BASE_NOCTOR) CORINFO_TYPE_PTR, { }, HFIF_SS_ARG },
530498
{ FUNC(CORINFO_HELP_READYTORUN_NONGCTHREADSTATIC_BASE) CORINFO_TYPE_PTR, { }, HFIF_SS_ARG },
531-
{ FUNC(CORINFO_HELP_READYTORUN_VIRTUAL_FUNC_PTR) CORINFO_TYPE_PTR, { CORINFO_TYPE_CLASS } },
499+
{ FUNC(CORINFO_HELP_READYTORUN_VIRTUAL_FUNC_PTR) CORINFO_TYPE_PTR, { CORINFO_TYPE_CLASS }, HFIF_SS_ARG },
532500
{ FUNC(CORINFO_HELP_READYTORUN_GENERIC_HANDLE) CORINFO_TYPE_PTR, { CORINFO_TYPE_PTR }, HFIF_SS_ARG | HFIF_THROW_OR_NO_RPI_OR_GC },
533501
{ FUNC(CORINFO_HELP_READYTORUN_DELEGATE_CTOR) CORINFO_TYPE_VOID, { CORINFO_TYPE_CLASS, CORINFO_TYPE_CLASS, CORINFO_TYPE_PTR }, HFIF_SS_ARG | HFIF_VAR_ARG },
534502
{ FUNC(CORINFO_HELP_READYTORUN_GENERIC_STATIC_BASE) CORINFO_TYPE_PTR, { CORINFO_TYPE_PTR }, HFIF_SS_ARG },
@@ -571,10 +539,10 @@ bool Llvm::helperCallMayPhysicallyThrow(CorInfoHelpFunc helperFunc) const
571539
// [R]PI helpers, implemented in "Runtime\thread.cpp".
572540
{ FUNC(CORINFO_HELP_JIT_PINVOKE_BEGIN) CORINFO_TYPE_VOID, { CORINFO_TYPE_PTR }, HFIF_SS_ARG | HFIF_NO_RPI_OR_GC },
573541
{ FUNC(CORINFO_HELP_JIT_PINVOKE_END) CORINFO_TYPE_VOID, { CORINFO_TYPE_PTR }, HFIF_NO_RPI_OR_GC },
574-
{ FUNC(CORINFO_HELP_JIT_REVERSE_PINVOKE_ENTER) CORINFO_TYPE_VOID, { CORINFO_TYPE_PTR } },
575-
{ FUNC(CORINFO_HELP_JIT_REVERSE_PINVOKE_ENTER_TRACK_TRANSITIONS) CORINFO_TYPE_VOID, { CORINFO_TYPE_PTR } },
576-
{ FUNC(CORINFO_HELP_JIT_REVERSE_PINVOKE_EXIT) CORINFO_TYPE_VOID, { CORINFO_TYPE_PTR }, HFIF_NO_RPI_OR_GC },
577-
{ FUNC(CORINFO_HELP_JIT_REVERSE_PINVOKE_EXIT_TRACK_TRANSITIONS) CORINFO_TYPE_VOID, { CORINFO_TYPE_PTR } },
542+
{ FUNC(CORINFO_HELP_JIT_REVERSE_PINVOKE_ENTER) CORINFO_TYPE_VOID, { CORINFO_TYPE_PTR }, HFIF_SS_ARG },
543+
{ FUNC(CORINFO_HELP_JIT_REVERSE_PINVOKE_ENTER_TRACK_TRANSITIONS) },
544+
{ FUNC(CORINFO_HELP_JIT_REVERSE_PINVOKE_EXIT) CORINFO_TYPE_VOID, { CORINFO_TYPE_PTR, CORINFO_TYPE_PTR }, HFIF_NO_RPI_OR_GC },
545+
{ FUNC(CORINFO_HELP_JIT_REVERSE_PINVOKE_EXIT_TRACK_TRANSITIONS) },
578546

579547
// Implemented in "CoreLib\src\System\Runtime\TypeLoaderExports.cs".
580548
{ FUNC(CORINFO_HELP_GVMLOOKUP_FOR_SLOT) CORINFO_TYPE_NATIVEINT, { CORINFO_TYPE_CLASS, CORINFO_TYPE_RT_HANDLE }, HFIF_SS_ARG }, // Oddity: IntPtr used for a pointer.
@@ -597,7 +565,6 @@ bool Llvm::helperCallMayPhysicallyThrow(CorInfoHelpFunc helperFunc) const
597565
{ FUNC(CORINFO_HELP_DISPATCH_INDIRECT_CALL) },
598566

599567
{ FUNC(CORINFO_HELP_LLVM_GET_OR_INIT_SHADOW_STACK_TOP) CORINFO_TYPE_PTR, { }, HFIF_NO_RPI_OR_GC },
600-
{ FUNC(CORINFO_HELP_LLVM_SET_SHADOW_STACK_TOP) CORINFO_TYPE_VOID, { CORINFO_TYPE_PTR }, HFIF_NO_RPI_OR_GC },
601568
{ FUNC(CORINFO_HELP_LLVM_EH_CATCH) CORINFO_TYPE_CLASS, { CORINFO_TYPE_NATIVEUINT }, HFIF_SS_ARG },
602569
{ FUNC(CORINFO_HELP_LLVM_EH_POP_UNWOUND_VIRTUAL_FRAMES) CORINFO_TYPE_VOID, { }, HFIF_SS_ARG },
603570
{ FUNC(CORINFO_HELP_LLVM_EH_PUSH_VIRTUAL_UNWIND_FRAME) CORINFO_TYPE_VOID, { CORINFO_TYPE_PTR, CORINFO_TYPE_PTR, CORINFO_TYPE_NATIVEUINT }, HFIF_NO_RPI_OR_GC },
@@ -611,6 +578,25 @@ bool Llvm::helperCallMayPhysicallyThrow(CorInfoHelpFunc helperFunc) const
611578
// Make sure our array is up-to-date.
612579
static_assert_no_msg(ArrLen(s_infos) == CORINFO_HELP_COUNT);
613580

581+
#ifdef DEBUG
582+
static bool s_infosVerified = false;
583+
if (!s_infosVerified)
584+
{
585+
for (const HelperFuncInfo& info : s_infos)
586+
{
587+
if (info.IsInitialized())
588+
{
589+
unsigned flags = info.Flags;
590+
591+
// Only helpers that will never call managed code are allowed to not have the shadow stack argument.
592+
assert(((flags & HFIF_SS_ARG) != 0) || ((flags & HFIF_NO_RPI_OR_GC) != 0));
593+
}
594+
}
595+
596+
s_infosVerified = true;
597+
}
598+
#endif // DEBUG
599+
614600
assert(helperFunc < CORINFO_HELP_COUNT);
615601
const HelperFuncInfo& info = s_infos[helperFunc];
616602

@@ -812,11 +798,6 @@ void Llvm::AddCodeReloc(void* handle)
812798
CallEEApi<EEApiId::AddCodeReloc, void>(m_pEECorInfo, handle);
813799
}
814800

815-
bool Llvm::IsRuntimeImport(CORINFO_METHOD_HANDLE methodHandle) const
816-
{
817-
return CallEEApi<EEApiId::IsRuntimeImport, uint32_t>(m_pEECorInfo, methodHandle) != 0;
818-
}
819-
820801
CorInfoType Llvm::GetPrimitiveTypeForTrivialWasmStruct(CORINFO_CLASS_HANDLE structHandle)
821802
{
822803
return CallEEApi<EEApiId::GetPrimitiveTypeForTrivialWasmStruct, CorInfoType>(m_pEECorInfo, structHandle);

src/coreclr/jit/llvm.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -342,8 +342,6 @@ class Llvm
342342

343343
GCInfo* getGCInfo();
344344

345-
bool callRequiresShadowStackSave(const GenTreeCall* call) const;
346-
bool helperCallRequiresShadowStackSave(CorInfoHelpFunc helperFunc) const;
347345
bool callHasShadowStackArg(const GenTreeCall* call) const;
348346
bool helperCallHasShadowStackArg(CorInfoHelpFunc helperFunc) const;
349347
bool callHasManagedCallingConvention(const GenTreeCall* call) const;
@@ -369,7 +367,6 @@ class Llvm
369367
const char* GetMangledFilterFuncletName(unsigned index);
370368
bool GetSignatureForMethodSymbol(CORINFO_GENERIC_HANDLE symbolHandle, CORINFO_SIG_INFO* pSig);
371369
void AddCodeReloc(void* handle);
372-
bool IsRuntimeImport(CORINFO_METHOD_HANDLE methodHandle) const;
373370
CorInfoType GetPrimitiveTypeForTrivialWasmStruct(CORINFO_CLASS_HANDLE structHandle);
374371
void GetTypeDescriptor(CORINFO_CLASS_HANDLE typeHandle, TypeDescriptor* pTypeDescriptor);
375372
const char* GetAlternativeFunctionName();
@@ -437,6 +434,7 @@ class Llvm
437434
void lowerVirtualStubCall(GenTreeCall* callNode);
438435
void insertNullCheckForCall(GenTreeCall* callNode);
439436
void lowerDelegateInvoke(GenTreeCall* callNode);
437+
void lowerReversePInvokeExit(GenTreeCall* callNode);
440438
void lowerUnmanagedCall(GenTreeCall* callNode);
441439
void lowerCallToShadowStack(GenTreeCall* callNode);
442440
void lowerCallReturn(GenTreeCall* callNode);

0 commit comments

Comments
 (0)