Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions docs/design/features/standalone-gc-loading.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@ some terms that will be used often in this document.
This is an intentionally vague definition. The GC does not care how (or even *if*) programs are
compiled or executed, so it is up to the EE to invoke the GC whenever an executing
program does something that requires the GC's attention. The EE is notable because the implementation
of an execution engine varies widely between runtimes; the CoreRT EE is primarily in managed code
of an execution engine varies widely between runtimes; the NativeAOT EE is primarily in managed code
(C#), while CoreCLR (and the .NET Framework)'s EE is primarily in C++.
* The **GC**, or **Garbage Collector** - The component of the CLR responsible for allocating managed
objects and reclaiming unused memory. It is written in C++ and the code is shared by multiple runtimes.
(That is, CoreCLR/CoreRT may have different execution engines, but they share the *same* GC code.)
(That is, CoreCLR/NativeAOT may have different execution engines, but they share the *same* GC code.)
* The **DAC**, or **Data Access Component** - A subset of the execution engine that is compiled in
such a way that it can be run *out of process*, when debugging .NET code using a debugger. The DAC
is used by higher-level components such as SOS (Son of Strike, a windbg/lldb debugger extension for
Expand All @@ -45,8 +45,8 @@ to the codebase:

Worth noting is that the JIT (both RyuJIT and the legacy JIT(s) before it) can be built standalone
and have realized these same benefits. The existence of an interface and an implementation loadable
from shared libraries has enabled RyuJIT in particular to be used as the code generator for both the
CoreRT compiler and crossgen, while still being flexible enough to be tested using tools that implement
from shared libraries has enabled RyuJIT in particular to be reused as the code generator for the
AOT compilers, while still being flexible enough to be tested using tools that implement
very non-standard execution engines such as [SuperPMI](https://github.com/dotnet/runtime/blob/main/src/coreclr/tools/superpmi/readme.md).

The below loading protocol is inspired directly by the JIT loader and many aspects of the GC loader are identical
Expand Down
2 changes: 1 addition & 1 deletion src/coreclr/inc/cordebuginfo.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// The .NET Foundation licenses this file to you under the MIT license.

//
// Keep in sync with https://github.com/dotnet/corert/blob/master/src/Native/ObjWriter/cordebuginfo.h
// Keep in sync with llvm/tools/objwriter/cordebuginfo.h in current objwriter branch in https://github.com/dotnet/llvm-project repo
//

/**********************************************************************************/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,18 +32,18 @@

<PropertyGroup>

<!-- If CoreRT is being consumed via its package, runtime-specific properties must be set before compilation can proceed -->
<!-- If the NativeAOT toolchain is being consumed via package, runtime-specific properties must be set before compilation can proceed -->
<ImportRuntimeIlcPackageTargetDependsOn>RunResolvePackageDependencies</ImportRuntimeIlcPackageTargetDependsOn>
<IlcSetupPropertiesDependsOn>ImportRuntimeIlcPackageTarget</IlcSetupPropertiesDependsOn>
<IlcDynamicBuildPropertyDependencies>SetupProperties</IlcDynamicBuildPropertyDependencies>

</PropertyGroup>

<!-- Locate the runtime package according to the current target runtime -->
<Target Name="ImportRuntimeIlcPackageTarget" Condition="'$(BuildingFrameworkLibrary)' != 'true' AND $(IlcCalledViaPackage) == 'true'" DependsOnTargets="$(ImportRuntimeIlcPackageTargetDependsOn)" BeforeTargets="Publish">
<!-- This targets file is imported by the SDK when the PublishAot property is set. SDK resolves runtime package paths differently-->
<Error Condition="'@(ResolvedILCompilerPack)' == '' AND '$(PublishAot)' == 'true'" Text="The PackageDefinitions ItemGroup is required for target ImportRuntimeIlcPackageTarget" />
<!-- CoreRT SDK and Framework Assemblies need to be defined to avoid CoreCLR implementations being set as compiler inputs -->
<Error Condition="'@(ResolvedILCompilerPack)' == '' AND '$(PublishAot)' == 'true'" Text="The ResolvedILCompilerPack ItemGroup is required for target ImportRuntimeIlcPackageTarget" />
<!-- NativeAOT runtime pack assemblies need to be defined to avoid the default CoreCLR implementations being set as compiler inputs -->
<Error Condition="'@(PackageDefinitions)' == '' AND '$(PublishAot)' != 'true'" Text="The PackageDefinitions ItemGroup is required for target ImportRuntimeIlcPackageTarget" />


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,20 +13,13 @@
a target called ComputeFilesToPublish which produces the ItemGroup
ResolvedFileToPublish based on the inputs of @(IntermediateAssembly)
and @(ResolvedAssembliesToPublish). We modify those two item groups
to control what gets published after CoreRT optimizes the application.

For .NET Core 3.0:
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Deleting support for older .NET SDKs. We support .NET 6+ SDK only.

- The property has been renamed to _ResolvedCopyLocalPublishAssets in https://github.com/dotnet/sdk/pull/2646
- The target has been renamed to ComputeResolvedFilesToPublishList in https://github.com/dotnet/sdk/pull/3281
to control what gets published after NativeAOT optimizes the application.
-->
<Target Name="ComputeLinkedFilesToPublish"
BeforeTargets="ComputeFilesToPublish;ComputeResolvedFilesToPublishList"
BeforeTargets="ComputeResolvedFilesToPublishList"
DependsOnTargets="_ComputeAssembliesToCompileToNative;LinkNative">

<ItemGroup>
<ResolvedAssembliesToPublish Remove="@(_AssembliesToSkipPublish)" />
<ResolvedAssembliesToPublish Include="@(_LinkedResolvedAssemblies)" />

<_ResolvedCopyLocalPublishAssets Remove="@(_AssembliesToSkipPublish)" />
<_ResolvedCopyLocalPublishAssets Include="@(_LinkedResolvedAssemblies)" />
</ItemGroup>
Expand Down Expand Up @@ -59,27 +52,27 @@

<!-- Fail with descriptive error message for common unsupported cases. -->
<Error Condition="'$(DisableUnsupportedError)' != 'true' and '$(OS)' == 'Windows_NT' and !$(RuntimeIdentifier.StartsWith('win'))"
Text="Cross-OS native compilation is not supported. https://github.com/dotnet/corert/issues/5458" />
Text="Cross-OS native compilation is not supported." />

<Error Condition="'$(DisableUnsupportedError)' != 'true' and '$(OS)' != 'Windows_NT' and $(RuntimeIdentifier.StartsWith('win'))"
Text="Cross-OS native compilation is not supported. https://github.com/dotnet/corert/issues/5458" />
Text="Cross-OS native compilation is not supported." />

<Error Condition="'$(DisableUnsupportedError)' != 'true' and !($(RuntimeIdentifier.EndsWith('x64')) or
($(RuntimeIdentifier.EndsWith('arm64')) and !$(RuntimeIdentifier.StartsWith('osx'))))"
Text="Native compilation does not support targeting $(RuntimeIdentifier) yet. https://github.com/dotnet/corert/issues/4589" />
Text="Native compilation does not support targeting $(RuntimeIdentifier) yet." />

<Error Condition="'$(DisableUnsupportedError)' != 'true' and !('$(IlcHostArch)' == 'x64' or '$(IlcHostArch)' == 'arm64')"
Text="Native compilation can run on x64 and arm64 hosts only." />

<Error Condition="'$(IlcHostPackagePath)' == '' and '$(RuntimePackagePath)' != '' and ('$(IlcHostArch)' == 'x64' or '$(IlcHostArch)' == 'arm64')"
Text="Add a PackageReference for '$(IlcHostPackageName)' to allow cross-compilation for $(TargetArchitecture)" />

<!-- CoreRT SDK and Framework Assemblies need to be defined to avoid CoreCLR implementations being set as compiler inputs -->
<!-- NativeAOT runtime pack assemblies need to be defined to avoid the default CoreCLR implementations being set as compiler inputs -->
<Error Condition="'@(PrivateSdkAssemblies)' == ''" Text="The PrivateSdkAssemblies ItemGroup is required for _ComputeAssembliesToCompileToNative" />
<Error Condition="'@(FrameworkAssemblies)' == ''" Text="The FrameworkAssemblies ItemGroup is required for _ComputeAssembliesToCompileToNative" />

<ComputeManagedAssembliesToCompileToNative
Assemblies="@(ResolvedAssembliesToPublish);@(_ResolvedCopyLocalPublishAssets)"
Assemblies="@(_ResolvedCopyLocalPublishAssets)"
DotNetAppHostExecutableName="$(_DotNetAppHostExecutableName)"
DotNetHostFxrLibraryName="$(_DotNetHostFxrLibraryName)"
DotNetHostPolicyLibraryName="$(_DotNetHostPolicyLibraryName)"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ The .NET Foundation licenses this file to you under the MIT license.
<LinkerArg Condition="'$(LinkerSubsystem)' != ''" Include="/SUBSYSTEM:$(LinkerSubsystem)" />
<LinkerArg Condition="'$(OutputType)' == 'WinExe' or '$(OutputType)' == 'Exe'" Include="/ENTRY:$(EntryPointSymbol)" />
<LinkerArg Condition="$(NativeLib) == 'Shared'" Include="/INCLUDE:NativeAOT_StaticInitialization" />
<LinkerArg Include="/NATVIS:&quot;$(MSBuildThisFileDirectory)CoreRTNatVis.natvis&quot;" />
<LinkerArg Include="/NATVIS:&quot;$(MSBuildThisFileDirectory)NativeAOT.natvis&quot;" />
<LinkerArg Condition="'$(ControlFlowGuard)' == 'Guard'" Include="/guard:cf" />
</ItemGroup>

Expand Down
6 changes: 6 additions & 0 deletions src/coreclr/nativeaot/BuildIntegration/WindowsAPIs.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2334,3 +2334,9 @@ ws2_32!WSCUnInstallNameSpace
ws2_32!WSCUpdateProvider
ws2_32!WSCWriteNameSpaceOrder
ws2_32!WSCWriteProviderOrder
ucrtbase!_aligned_malloc
ucrtbase!_aligned_free
ucrtbase!_aligned_realloc
ucrtbase!calloc
ucrtbase!free
ucrtbase!malloc
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ internal static partial class RuntimeExports
[RuntimeExport("RhNewObject")]
public static unsafe object RhNewObject(MethodTable* pEEType)
{
// This is structured in a funny way because at the present state of things in CoreRT, the Debug.Assert
// This is structured in a funny way because at the present state of things, the Debug.Assert
// below will call into the assert defined in the class library (and not the MRT version of it). The one
// in the class library is not low level enough to be callable when GC statics are not initialized yet.
// Feel free to restructure once that's not a problem.
Expand Down
6 changes: 3 additions & 3 deletions src/coreclr/nativeaot/Runtime/AsmOffsets.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,12 +94,12 @@ ASM_OFFSET( 18, 28, CallDescrData, pReturnBuffer)
// constant to find to BogusFunction(), and build.
//
// Here's a sample compiler error:
// In file included from corert/src/Native/Runtime/AsmOffsetsVerify.cpp:38:
// corert/src/Native/Runtime/Full/../AsmOffsets.h:117:61: error: calling a private constructor of class
// In file included from nativeaot/Runtime/AsmOffsetsVerify.cpp:38:
// nativeaot/Runtime/Full/../AsmOffsets.h:117:61: error: calling a private constructor of class
// 'AsmOffsets::FindCompileTimeConstant<25>'
// FindCompileTimeConstant<offsetof(ExInfo, m_passNumber)> bogus_variable;
// ^
// corert/src/Native/Runtime/Full/../AsmOffsets.h:111:5: note: declared private here
// nativeaot/Runtime/Full/../AsmOffsets.h:111:5: note: declared private here
// FindCompileTimeConstant();
// ^
template<size_t N>
Expand Down
2 changes: 1 addition & 1 deletion src/coreclr/nativeaot/Runtime/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@ add_definitions(-DFEATURE_DYNAMIC_CODE)
add_compile_definitions($<$<OR:$<CONFIG:Debug>,$<CONFIG:Checked>>:FEATURE_GC_STRESS>)
add_definitions(-DFEATURE_REDHAWK)
add_definitions(-DVERIFY_HEAP)
add_definitions(-DCORERT)
add_definitions(-DNATIVEAOT)
add_definitions(-DFEATURE_CACHED_INTERFACE_DISPATCH)
add_definitions(-D_LIB)

Expand Down
2 changes: 1 addition & 1 deletion src/coreclr/nativeaot/Runtime/DebugHeader.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ static GlobalValueEntry s_GlobalEntries[GlobalEntriesArraySize];
struct DotNetRuntimeDebugHeader
{
// The cookie serves as a sanity check against process corruption or being requested
// to treat some other non-.Net module as though it did contain the coreRT runtime.
// to treat some other non-.Net module as though it did contain the .Net runtime.
// It can also be changed if we want to make a breaking change so drastic that
// earlier debuggers should treat the module as if it had no .Net runtime at all.
// If the cookie is valid a debugger is safe to assume the Major/Minor version fields
Expand Down
2 changes: 0 additions & 2 deletions src/coreclr/nativeaot/Runtime/ICodeManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -145,8 +145,6 @@ class ICodeManager
PTR_PTR_VOID * ppvRetAddrLocation, // out
GCRefKind * pRetValueKind) = 0; // out

virtual void UnsynchronizedHijackMethodLoops(MethodInfo * pMethodInfo) = 0;
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This was specific to .NET Native for UWP. We do not need it anymore.


virtual PTR_VOID RemapHardwareFaultToGCSafePoint(MethodInfo * pMethodInfo, PTR_VOID controlPC) = 0;

virtual bool EHEnumInit(MethodInfo * pMethodInfo, PTR_VOID * pMethodStartAddress, EHEnumState * pEHEnumState) = 0;
Expand Down
14 changes: 7 additions & 7 deletions src/coreclr/nativeaot/Runtime/StackFrameIterator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
// warning C4061: enumerator '{blah}' in switch of enum '{blarg}' is not explicitly handled by a case label
#pragma warning(disable:4061)

#if !defined(USE_PORTABLE_HELPERS) // @TODO: CORERT: these are (currently) only implemented in assembly helpers
#if !defined(USE_PORTABLE_HELPERS) // @TODO: these are (currently) only implemented in assembly helpers

#if defined(FEATURE_DYNAMIC_CODE)
EXTERN_C void * RhpUniversalTransition();
Expand Down Expand Up @@ -163,7 +163,7 @@ void StackFrameIterator::InternalInit(Thread * pThreadToWalk, PTR_PInvokeTransit
// properly walk it in parallel.
ResetNextExInfoForSP((uintptr_t)dac_cast<TADDR>(pFrame));

#if !defined(USE_PORTABLE_HELPERS) // @TODO: CORERT: no portable version of regdisplay
#if !defined(USE_PORTABLE_HELPERS) // @TODO: no portable version of regdisplay
memset(&m_RegDisplay, 0, sizeof(m_RegDisplay));
m_RegDisplay.SetIP((PCODE)pFrame->m_RIP);
m_RegDisplay.SetAddrOfIP((PTR_PCODE)PTR_HOST_MEMBER(PInvokeTransitionFrame, pFrame, m_RIP));
Expand Down Expand Up @@ -652,7 +652,7 @@ void StackFrameIterator::UnwindFuncletInvokeThunk()
{
ASSERT((m_dwFlags & MethodStateCalculated) == 0);

#if defined(USE_PORTABLE_HELPERS) // @TODO: CORERT: Currently no funclet invoke defined in a portable way
#if defined(USE_PORTABLE_HELPERS) // @TODO: Currently no funclet invoke defined in a portable way
return;
#else // defined(USE_PORTABLE_HELPERS)
ASSERT(CategorizeUnadjustedReturnAddress(m_ControlPC) == InFuncletInvokeThunk);
Expand Down Expand Up @@ -1041,7 +1041,7 @@ void StackFrameIterator::UnwindUniversalTransitionThunk()
{
ASSERT((m_dwFlags & MethodStateCalculated) == 0);

#if defined(USE_PORTABLE_HELPERS) // @TODO: CORERT: Corresponding helper code is only defined in assembly code
#if defined(USE_PORTABLE_HELPERS) // @TODO: Corresponding helper code is only defined in assembly code
return;
#else // defined(USE_PORTABLE_HELPERS)
ASSERT(CategorizeUnadjustedReturnAddress(m_ControlPC) == InUniversalTransitionThunk);
Expand Down Expand Up @@ -1126,7 +1126,7 @@ void StackFrameIterator::UnwindCallDescrThunk()
{
ASSERT((m_dwFlags & MethodStateCalculated) == 0);

#if defined(USE_PORTABLE_HELPERS) // @TODO: CORERT: Corresponding helper code is only defined in assembly code
#if defined(USE_PORTABLE_HELPERS) // @TODO: Corresponding helper code is only defined in assembly code
return;
#else // defined(USE_PORTABLE_HELPERS)
ASSERT(CategorizeUnadjustedReturnAddress(m_ControlPC) == InCallDescrThunk);
Expand Down Expand Up @@ -1208,7 +1208,7 @@ void StackFrameIterator::UnwindThrowSiteThunk()
{
ASSERT((m_dwFlags & MethodStateCalculated) == 0);

#if defined(USE_PORTABLE_HELPERS) // @TODO: CORERT: no portable version of throw helpers
#if defined(USE_PORTABLE_HELPERS) // @TODO: no portable version of throw helpers
return;
#else // defined(USE_PORTABLE_HELPERS)
ASSERT(CategorizeUnadjustedReturnAddress(m_ControlPC) == InThrowSiteThunk);
Expand Down Expand Up @@ -1758,7 +1758,7 @@ PTR_VOID StackFrameIterator::AdjustReturnAddressBackward(PTR_VOID controlPC)
// static
StackFrameIterator::ReturnAddressCategory StackFrameIterator::CategorizeUnadjustedReturnAddress(PTR_VOID returnAddress)
{
#if defined(USE_PORTABLE_HELPERS) // @TODO: CORERT: no portable thunks are defined
#if defined(USE_PORTABLE_HELPERS) // @TODO: no portable thunks are defined

return InManagedCode;

Expand Down
2 changes: 1 addition & 1 deletion src/coreclr/nativeaot/Runtime/gcheaputilities.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ HRESULT GCHeapUtilities::InitializeDefaultGC()

void GCHeapUtilities::RecordEventStateChange(bool isPublicProvider, GCEventKeyword keywords, GCEventLevel level)
{
// CoreRT does not support standalone GC. Call GCEventStatus directly to keep things simple.
// NativeAOT does not support standalone GC. Call GCEventStatus directly to keep things simple.
GCEventStatus::Set(isPublicProvider ? GCEventProvider_Default : GCEventProvider_Private, keywords, level);
}

Expand Down
4 changes: 2 additions & 2 deletions src/coreclr/nativeaot/Runtime/gcrhenv.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1180,7 +1180,7 @@ void GCToEEInterface::DiagWalkBGCSurvivors(void* gcContext)

void GCToEEInterface::StompWriteBarrier(WriteBarrierParameters* args)
{
// CoreRT doesn't patch the write barrier like CoreCLR does, but it
// NativeAOT doesn't patch the write barrier like CoreCLR does, but it
// still needs to record the changes in the GC heap.

bool is_runtime_suspended = args->is_runtime_suspended;
Expand Down Expand Up @@ -1399,7 +1399,7 @@ bool GCToEEInterface::CreateThread(void (*threadStart)(void*), void* arg, bool i
return true;
}

// CoreRT does not use async pinned handles
// NativeAOT does not use async pinned handles
void GCToEEInterface::WalkAsyncPinnedForPromotion(Object* object, ScanContext* sc, promote_func* callback)
{
UNREFERENCED_PARAMETER(object);
Expand Down
6 changes: 3 additions & 3 deletions src/coreclr/nativeaot/Runtime/inc/rhbinder.h
Original file line number Diff line number Diff line change
Expand Up @@ -338,7 +338,7 @@ struct InterfaceDispatchCell
// a single instruction within our stubs.
enum PInvokeTransitionFrameFlags
{
// NOTE: Keep in sync with ndp\FxCore\CoreRT\src\Native\Runtime\arm\AsmMacros.h
// NOTE: Keep in sync with src\coreclr\nativeaot\Runtime\arm\AsmMacros.h

// NOTE: The order in which registers get pushed in the PInvokeTransitionFrame's m_PreservedRegs list has
// to match the order of these flags (that's also the order in which they are read in StackFrameIterator.cpp
Expand Down Expand Up @@ -374,7 +374,7 @@ enum PInvokeTransitionFrameFlags
#elif defined(TARGET_ARM64)
enum PInvokeTransitionFrameFlags : uint64_t
{
// NOTE: Keep in sync with ndp\FxCore\CoreRT\src\Native\Runtime\arm64\AsmMacros.h
// NOTE: Keep in sync with src\coreclr\nativeaot\Runtime\arm64\AsmMacros.h

// NOTE: The order in which registers get pushed in the PInvokeTransitionFrame's m_PreservedRegs list has
// to match the order of these flags (that's also the order in which they are read in StackFrameIterator.cpp
Expand Down Expand Up @@ -459,7 +459,7 @@ inline GCRefKind TransitionFrameFlagsToReturnKind(uint64_t transFrameFlags)
#else // TARGET_ARM
enum PInvokeTransitionFrameFlags
{
// NOTE: Keep in sync with ndp\FxCore\CoreRT\src\Native\Runtime\[amd64|i386]\AsmMacros.inc
// NOTE: Keep in sync with src\coreclr\nativeaot\Runtime\[amd64|i386]\AsmMacros.inc

// NOTE: The order in which registers get pushed in the PInvokeTransitionFrame's m_PreservedRegs list has
// to match the order of these flags (that's also the order in which they are read in StackFrameIterator.cpp
Expand Down
4 changes: 2 additions & 2 deletions src/coreclr/nativeaot/Runtime/stressLog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -543,7 +543,7 @@ void StressLog::EnumerateStressMsgs(/*STRESSMSGCALLBACK*/void* smcbWrapper, /*EN
// entries (this was the case for %s arguments)
memcpy_s(argsCopy, sizeof(argsCopy), latestMsg->args, (latestMsg->numberOfArgs)*sizeof(void*));

// @TODO: CORERT: Truncating threadId to 32-bit
// @TODO: Truncating threadId to 32-bit
if (!smcb((UINT32)latestLog->threadId, deltaTime, latestMsg->facility, format, argsCopy, token))
break;
}
Expand All @@ -553,7 +553,7 @@ void StressLog::EnumerateStressMsgs(/*STRESSMSGCALLBACK*/void* smcbWrapper, /*EN
{
latestLog->readPtr = NULL;

// @TODO: CORERT: Truncating threadId to 32-bit
// @TODO: Truncating threadId to 32-bit
if (!etcb((UINT32)latestLog->threadId, token))
break;
}
Expand Down
2 changes: 0 additions & 2 deletions src/coreclr/nativeaot/Runtime/thread.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -737,8 +737,6 @@ bool Thread::InternalHijack(PAL_LIMITED_CONTEXT * pSuspendCtx, void * pvHijackTa
{
frameIterator.CalculateCurrentMethodState();

frameIterator.GetCodeManager()->UnsynchronizedHijackMethodLoops(frameIterator.GetMethodInfo());

PTR_PTR_VOID ppvRetAddrLocation;
GCRefKind retValueKind;

Expand Down
Loading