diff --git a/src/coreclr/nativeaot/Runtime/StackFrameIterator.cpp b/src/coreclr/nativeaot/Runtime/StackFrameIterator.cpp index 8864652ddcfc54..a6ecd6c0d08d43 100644 --- a/src/coreclr/nativeaot/Runtime/StackFrameIterator.cpp +++ b/src/coreclr/nativeaot/Runtime/StackFrameIterator.cpp @@ -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; @@ -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. @@ -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)) diff --git a/src/coreclr/nativeaot/Runtime/StackFrameIterator.h b/src/coreclr/nativeaot/Runtime/StackFrameIterator.h index dc7cdca795cc13..c3a6126b6ff2c9 100644 --- a/src/coreclr/nativeaot/Runtime/StackFrameIterator.h +++ b/src/coreclr/nativeaot/Runtime/StackFrameIterator.h @@ -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. @@ -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; }; diff --git a/src/coreclr/nativeaot/Runtime/amd64/AsmOffsetsCpu.h b/src/coreclr/nativeaot/Runtime/amd64/AsmOffsetsCpu.h index 07a73c1e4bcb0f..8dd52b3acfa85f 100644 --- a/src/coreclr/nativeaot/Runtime/amd64/AsmOffsetsCpu.h +++ b/src/coreclr/nativeaot/Runtime/amd64/AsmOffsetsCpu.h @@ -8,7 +8,7 @@ // 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) @@ -16,7 +16,7 @@ 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) @@ -24,12 +24,12 @@ 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) @@ -71,7 +71,7 @@ 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) @@ -79,7 +79,7 @@ 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) @@ -87,12 +87,12 @@ 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) diff --git a/src/coreclr/nativeaot/Runtime/arm/AsmOffsetsCpu.h b/src/coreclr/nativeaot/Runtime/arm/AsmOffsetsCpu.h index 4d40c0ecb27f69..ab5b991274b421 100644 --- a/src/coreclr/nativeaot/Runtime/arm/AsmOffsetsCpu.h +++ b/src/coreclr/nativeaot/Runtime/arm/AsmOffsetsCpu.h @@ -7,7 +7,7 @@ // // 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) @@ -15,7 +15,7 @@ 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) @@ -23,12 +23,12 @@ 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) diff --git a/src/coreclr/nativeaot/Runtime/arm64/AsmOffsetsCpu.h b/src/coreclr/nativeaot/Runtime/arm64/AsmOffsetsCpu.h index 529ab2c47331fe..193692feae810a 100644 --- a/src/coreclr/nativeaot/Runtime/arm64/AsmOffsetsCpu.h +++ b/src/coreclr/nativeaot/Runtime/arm64/AsmOffsetsCpu.h @@ -7,7 +7,7 @@ // // 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) @@ -15,7 +15,7 @@ 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) @@ -23,12 +23,12 @@ 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) diff --git a/src/coreclr/nativeaot/Runtime/i386/AsmOffsetsCpu.h b/src/coreclr/nativeaot/Runtime/i386/AsmOffsetsCpu.h index 79289fb1127c18..7e19e77b7e885c 100644 --- a/src/coreclr/nativeaot/Runtime/i386/AsmOffsetsCpu.h +++ b/src/coreclr/nativeaot/Runtime/i386/AsmOffsetsCpu.h @@ -7,7 +7,7 @@ // // 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) @@ -15,7 +15,7 @@ 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) @@ -23,12 +23,12 @@ 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) diff --git a/src/coreclr/nativeaot/Runtime/thread.cpp b/src/coreclr/nativeaot/Runtime/thread.cpp index 9e0f2a91c9e744..e2be011a21c6aa 100644 --- a/src/coreclr/nativeaot/Runtime/thread.cpp +++ b/src/coreclr/nativeaot/Runtime/thread.cpp @@ -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