Skip to content

Commit

Permalink
Remove StackFrameIterator.ShouldSkipRegularGcReporting (#98081)
Browse files Browse the repository at this point in the history
* Remove StackFrameIterator.ShouldSkipRegularGcReporting

* Adjust windows-x64 offsets
  • Loading branch information
filipnavara authored Feb 7, 2024
1 parent 569b86a commit 19dbb6a
Show file tree
Hide file tree
Showing 7 changed files with 32 additions and 48 deletions.
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

0 comments on commit 19dbb6a

Please sign in to comment.