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: 0 additions & 8 deletions src/coreclr/nativeaot/Runtime/StackFrameIterator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,6 @@ void StackFrameIterator::EnterInitialInvalidState(Thread * pThreadToWalk)
m_HijackedReturnValueKind = GCRK_Unknown;
m_pConservativeStackRangeLowerBound = NULL;
m_pConservativeStackRangeUpperBound = NULL;
m_ShouldSkipRegularGcReporting = false;
m_pendingFuncletFramePointer = NULL;
m_pNextExInfo = pThreadToWalk->GetCurExInfo();
m_pPreviousTransitionFrame = NULL;
Expand Down Expand Up @@ -1592,8 +1591,6 @@ void StackFrameIterator::PrepareToYieldFrame()
m_ControlPC = AdjustReturnAddressBackward(m_ControlPC);
}

m_ShouldSkipRegularGcReporting = false;

// Each time a managed frame is yielded, configure the iterator to explicitly indicate
// whether or not unwinding to the current frame has revealed a stack range that must be
// conservatively reported by the GC.
Expand Down Expand Up @@ -1846,11 +1843,6 @@ StackFrameIterator::ReturnAddressCategory StackFrameIterator::CategorizeUnadjust
#endif // defined(USE_PORTABLE_HELPERS)
}

bool StackFrameIterator::ShouldSkipRegularGcReporting()
{
return m_ShouldSkipRegularGcReporting;
}

#ifndef DACCESS_COMPILE

COOP_PINVOKE_HELPER(FC_BOOL_RET, RhpSfiInit, (StackFrameIterator* pThis, PAL_LIMITED_CONTEXT* pStackwalkCtx, CLR_BOOL instructionFault, CLR_BOOL* pfIsExceptionIntercepted))
Expand Down
5 changes: 0 additions & 5 deletions src/coreclr/nativeaot/Runtime/StackFrameIterator.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,6 @@ class StackFrameIterator
bool HasStackRangeToReportConservatively();
void GetStackRangeToReportConservatively(PTR_OBJECTREF * ppLowerBound, PTR_OBJECTREF * ppUpperBound);

// Debugger Hijacked frame looks very much like a usual managed frame except when the
// frame must be reported conservatively, and when that happens, regular GC reporting should be skipped
bool ShouldSkipRegularGcReporting();

private:
// The invoke of a funclet is a bit special and requires an assembly thunk, but we don't want to break the
// stackwalk due to this. So this routine will unwind through the assembly thunks used to invoke funclets.
Expand Down Expand Up @@ -220,7 +216,6 @@ class StackFrameIterator
PreservedRegPtrs m_funcletPtrs; // @TODO: Placing the 'scratch space' in the StackFrameIterator is not
// preferred because not all StackFrameIterators require this storage
// space. However, the implementation simpler by doing it this way.
bool m_ShouldSkipRegularGcReporting;
PTR_VOID m_OriginalControlPC;
PTR_PInvokeTransitionFrame m_pPreviousTransitionFrame;
};
Expand Down
20 changes: 10 additions & 10 deletions src/coreclr/nativeaot/Runtime/amd64/AsmOffsetsCpu.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,28 +8,28 @@
// NOTE: the offsets MUST be in hex notation WITHOUT the 0x prefix

#ifndef UNIX_AMD64_ABI
PLAT_ASM_SIZEOF(270, ExInfo)
PLAT_ASM_SIZEOF(260, ExInfo)
PLAT_ASM_OFFSET(0, ExInfo, m_pPrevExInfo)
PLAT_ASM_OFFSET(8, ExInfo, m_pExContext)
PLAT_ASM_OFFSET(10, ExInfo, m_exception)
PLAT_ASM_OFFSET(18, ExInfo, m_kind)
PLAT_ASM_OFFSET(19, ExInfo, m_passNumber)
PLAT_ASM_OFFSET(1c, ExInfo, m_idxCurClause)
PLAT_ASM_OFFSET(20, ExInfo, m_frameIter)
PLAT_ASM_OFFSET(260, ExInfo, m_notifyDebuggerSP)
PLAT_ASM_OFFSET(250, ExInfo, m_notifyDebuggerSP)

PLAT_ASM_OFFSET(0, PInvokeTransitionFrame, m_RIP)
PLAT_ASM_OFFSET(8, PInvokeTransitionFrame, m_FramePointer)
PLAT_ASM_OFFSET(10, PInvokeTransitionFrame, m_pThread)
PLAT_ASM_OFFSET(18, PInvokeTransitionFrame, m_Flags)
PLAT_ASM_OFFSET(20, PInvokeTransitionFrame, m_PreservedRegs)

PLAT_ASM_SIZEOF(240, StackFrameIterator)
PLAT_ASM_SIZEOF(230, StackFrameIterator)
PLAT_ASM_OFFSET(10, StackFrameIterator, m_FramePointer)
PLAT_ASM_OFFSET(18, StackFrameIterator, m_ControlPC)
PLAT_ASM_OFFSET(20, StackFrameIterator, m_RegDisplay)
PLAT_ASM_OFFSET(228, StackFrameIterator, m_OriginalControlPC)
PLAT_ASM_OFFSET(230, StackFrameIterator, m_pPreviousTransitionFrame)
PLAT_ASM_OFFSET(220, StackFrameIterator, m_OriginalControlPC)
PLAT_ASM_OFFSET(228, StackFrameIterator, m_pPreviousTransitionFrame)

PLAT_ASM_SIZEOF(100, PAL_LIMITED_CONTEXT)
PLAT_ASM_OFFSET(0, PAL_LIMITED_CONTEXT, IP)
Expand Down Expand Up @@ -71,28 +71,28 @@ PLAT_ASM_OFFSET(90, REGDISPLAY, Xmm)

#else // !UNIX_AMD64_ABI

PLAT_ASM_SIZEOF(1a8, ExInfo)
PLAT_ASM_SIZEOF(1a0, ExInfo)
PLAT_ASM_OFFSET(0, ExInfo, m_pPrevExInfo)
PLAT_ASM_OFFSET(8, ExInfo, m_pExContext)
PLAT_ASM_OFFSET(10, ExInfo, m_exception)
PLAT_ASM_OFFSET(18, ExInfo, m_kind)
PLAT_ASM_OFFSET(19, ExInfo, m_passNumber)
PLAT_ASM_OFFSET(1c, ExInfo, m_idxCurClause)
PLAT_ASM_OFFSET(20, ExInfo, m_frameIter)
PLAT_ASM_OFFSET(1a0, ExInfo, m_notifyDebuggerSP)
PLAT_ASM_OFFSET(198, ExInfo, m_notifyDebuggerSP)

PLAT_ASM_OFFSET(0, PInvokeTransitionFrame, m_RIP)
PLAT_ASM_OFFSET(8, PInvokeTransitionFrame, m_FramePointer)
PLAT_ASM_OFFSET(10, PInvokeTransitionFrame, m_pThread)
PLAT_ASM_OFFSET(18, PInvokeTransitionFrame, m_Flags)
PLAT_ASM_OFFSET(20, PInvokeTransitionFrame, m_PreservedRegs)

PLAT_ASM_SIZEOF(180, StackFrameIterator)
PLAT_ASM_SIZEOF(178, StackFrameIterator)
PLAT_ASM_OFFSET(10, StackFrameIterator, m_FramePointer)
PLAT_ASM_OFFSET(18, StackFrameIterator, m_ControlPC)
PLAT_ASM_OFFSET(20, StackFrameIterator, m_RegDisplay)
PLAT_ASM_OFFSET(170, StackFrameIterator, m_OriginalControlPC)
PLAT_ASM_OFFSET(178, StackFrameIterator, m_pPreviousTransitionFrame)
PLAT_ASM_OFFSET(168, StackFrameIterator, m_OriginalControlPC)
PLAT_ASM_OFFSET(170, StackFrameIterator, m_pPreviousTransitionFrame)

PLAT_ASM_SIZEOF(50, PAL_LIMITED_CONTEXT)
PLAT_ASM_OFFSET(0, PAL_LIMITED_CONTEXT, IP)
Expand Down
10 changes: 5 additions & 5 deletions src/coreclr/nativeaot/Runtime/arm/AsmOffsetsCpu.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,28 +7,28 @@
//
// NOTE: the offsets MUST be in hex notation WITHOUT the 0x prefix

PLAT_ASM_SIZEOF(138, ExInfo)
PLAT_ASM_SIZEOF(130, ExInfo)
PLAT_ASM_OFFSET(0, ExInfo, m_pPrevExInfo)
PLAT_ASM_OFFSET(4, ExInfo, m_pExContext)
PLAT_ASM_OFFSET(8, ExInfo, m_exception)
PLAT_ASM_OFFSET(0c, ExInfo, m_kind)
PLAT_ASM_OFFSET(0d, ExInfo, m_passNumber)
PLAT_ASM_OFFSET(10, ExInfo, m_idxCurClause)
PLAT_ASM_OFFSET(18, ExInfo, m_frameIter)
PLAT_ASM_OFFSET(130, ExInfo, m_notifyDebuggerSP)
PLAT_ASM_OFFSET(128, ExInfo, m_notifyDebuggerSP)

PLAT_ASM_OFFSET(0, PInvokeTransitionFrame, m_FramePointer)
PLAT_ASM_OFFSET(4, PInvokeTransitionFrame, m_RIP)
PLAT_ASM_OFFSET(8, PInvokeTransitionFrame, m_pThread)
PLAT_ASM_OFFSET(c, PInvokeTransitionFrame, m_Flags)
PLAT_ASM_OFFSET(10, PInvokeTransitionFrame, m_PreservedRegs)

PLAT_ASM_SIZEOF(118, StackFrameIterator)
PLAT_ASM_SIZEOF(110, StackFrameIterator)
PLAT_ASM_OFFSET(08, StackFrameIterator, m_FramePointer)
PLAT_ASM_OFFSET(0c, StackFrameIterator, m_ControlPC)
PLAT_ASM_OFFSET(10, StackFrameIterator, m_RegDisplay)
PLAT_ASM_OFFSET(10c, StackFrameIterator, m_OriginalControlPC)
PLAT_ASM_OFFSET(110, StackFrameIterator, m_pPreviousTransitionFrame)
PLAT_ASM_OFFSET(108, StackFrameIterator, m_OriginalControlPC)
PLAT_ASM_OFFSET(10c, StackFrameIterator, m_pPreviousTransitionFrame)

PLAT_ASM_SIZEOF(70, PAL_LIMITED_CONTEXT)
PLAT_ASM_OFFSET(24, PAL_LIMITED_CONTEXT, IP)
Expand Down
10 changes: 5 additions & 5 deletions src/coreclr/nativeaot/Runtime/arm64/AsmOffsetsCpu.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,28 +7,28 @@
//
// NOTE: the offsets MUST be in hex notation WITHOUT the 0x prefix

PLAT_ASM_SIZEOF(290, ExInfo)
PLAT_ASM_SIZEOF(288, ExInfo)
PLAT_ASM_OFFSET(0, ExInfo, m_pPrevExInfo)
PLAT_ASM_OFFSET(8, ExInfo, m_pExContext)
PLAT_ASM_OFFSET(10, ExInfo, m_exception)
PLAT_ASM_OFFSET(18, ExInfo, m_kind)
PLAT_ASM_OFFSET(19, ExInfo, m_passNumber)
PLAT_ASM_OFFSET(1c, ExInfo, m_idxCurClause)
PLAT_ASM_OFFSET(20, ExInfo, m_frameIter)
PLAT_ASM_OFFSET(288, ExInfo, m_notifyDebuggerSP)
PLAT_ASM_OFFSET(280, ExInfo, m_notifyDebuggerSP)

PLAT_ASM_OFFSET(0, PInvokeTransitionFrame, m_FramePointer)
PLAT_ASM_OFFSET(8, PInvokeTransitionFrame, m_RIP)
PLAT_ASM_OFFSET(10, PInvokeTransitionFrame, m_pThread)
PLAT_ASM_OFFSET(18, PInvokeTransitionFrame, m_Flags)
PLAT_ASM_OFFSET(20, PInvokeTransitionFrame, m_PreservedRegs)

PLAT_ASM_SIZEOF(268, StackFrameIterator)
PLAT_ASM_SIZEOF(260, StackFrameIterator)
PLAT_ASM_OFFSET(10, StackFrameIterator, m_FramePointer)
PLAT_ASM_OFFSET(18, StackFrameIterator, m_ControlPC)
PLAT_ASM_OFFSET(20, StackFrameIterator, m_RegDisplay)
PLAT_ASM_OFFSET(258, StackFrameIterator, m_OriginalControlPC)
PLAT_ASM_OFFSET(260, StackFrameIterator, m_pPreviousTransitionFrame)
PLAT_ASM_OFFSET(250, StackFrameIterator, m_OriginalControlPC)
PLAT_ASM_OFFSET(258, StackFrameIterator, m_pPreviousTransitionFrame)

PLAT_ASM_SIZEOF(C0, PAL_LIMITED_CONTEXT)

Expand Down
10 changes: 5 additions & 5 deletions src/coreclr/nativeaot/Runtime/i386/AsmOffsetsCpu.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,28 +7,28 @@
//
// NOTE: the offsets MUST be in hex notation WITHOUT the 0x prefix

PLAT_ASM_SIZEOF(c0, ExInfo)
PLAT_ASM_SIZEOF(bc, ExInfo)
PLAT_ASM_OFFSET(0, ExInfo, m_pPrevExInfo)
PLAT_ASM_OFFSET(4, ExInfo, m_pExContext)
PLAT_ASM_OFFSET(8, ExInfo, m_exception)
PLAT_ASM_OFFSET(0c, ExInfo, m_kind)
PLAT_ASM_OFFSET(0d, ExInfo, m_passNumber)
PLAT_ASM_OFFSET(10, ExInfo, m_idxCurClause)
PLAT_ASM_OFFSET(14, ExInfo, m_frameIter)
PLAT_ASM_OFFSET(bc, ExInfo, m_notifyDebuggerSP)
PLAT_ASM_OFFSET(b8, ExInfo, m_notifyDebuggerSP)

PLAT_ASM_OFFSET(0, PInvokeTransitionFrame, m_RIP)
PLAT_ASM_OFFSET(4, PInvokeTransitionFrame, m_FramePointer)
PLAT_ASM_OFFSET(8, PInvokeTransitionFrame, m_pThread)
PLAT_ASM_OFFSET(0c, PInvokeTransitionFrame, m_Flags)
PLAT_ASM_OFFSET(10, PInvokeTransitionFrame, m_PreservedRegs)

PLAT_ASM_SIZEOF(a8, StackFrameIterator)
PLAT_ASM_SIZEOF(a4, StackFrameIterator)
PLAT_ASM_OFFSET(08, StackFrameIterator, m_FramePointer)
PLAT_ASM_OFFSET(0c, StackFrameIterator, m_ControlPC)
PLAT_ASM_OFFSET(10, StackFrameIterator, m_RegDisplay)
PLAT_ASM_OFFSET(a0, StackFrameIterator, m_OriginalControlPC)
PLAT_ASM_OFFSET(a4, StackFrameIterator, m_pPreviousTransitionFrame)
PLAT_ASM_OFFSET(9c, StackFrameIterator, m_OriginalControlPC)
PLAT_ASM_OFFSET(a0, StackFrameIterator, m_pPreviousTransitionFrame)

PLAT_ASM_SIZEOF(1c, PAL_LIMITED_CONTEXT)
PLAT_ASM_OFFSET(0, PAL_LIMITED_CONTEXT, IP)
Expand Down
17 changes: 7 additions & 10 deletions src/coreclr/nativeaot/Runtime/thread.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -518,16 +518,13 @@ void Thread::GcScanRootsWorker(ScanFunc * pfnEnumCallback, ScanContext * pvCallb

STRESS_LOG1(LF_GCROOTS, LL_INFO1000, "Scanning method %pK\n", (void*)frameIterator.GetRegisterSet()->IP);

if (!frameIterator.ShouldSkipRegularGcReporting())
{
EnumGcRefs(frameIterator.GetCodeManager(),
frameIterator.GetMethodInfo(),
frameIterator.GetEffectiveSafePointAddress(),
frameIterator.GetRegisterSet(),
pfnEnumCallback,
pvCallbackData,
frameIterator.IsActiveStackFrame());
}
EnumGcRefs(frameIterator.GetCodeManager(),
frameIterator.GetMethodInfo(),
frameIterator.GetEffectiveSafePointAddress(),
frameIterator.GetRegisterSet(),
pfnEnumCallback,
pvCallbackData,
frameIterator.IsActiveStackFrame());

// Each enumerated frame (including the first one) may have an associated stack range we need to
// report conservatively (every pointer aligned value that looks like it might be a GC reference is
Expand Down