From cf1c582931dc647b8e6ca58c34fcfb20d5d07a42 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 15 Oct 2024 10:41:53 -0700 Subject: [PATCH] Remove managed EH code frames from stack trace (#108831) When StackTrace is created inside of an exception filter, it contains stack frames of the managed exception handling code, like System.Runtime.EH.RhThrowEx System.Runtime.EH.DispatchEx System.Runtime.EH.FindFirstPassHandler These should not occur on the stack trace as they are internal implementation detail of the new EH. This change fixes it by adding [StackTraceHidden] attribute to these methods. Close #107995 Co-authored-by: Jan Vorlicek Co-authored-by: Jeff Schwartz --- .../Runtime.Base/src/System/Runtime/ExceptionHandling.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/coreclr/nativeaot/Runtime.Base/src/System/Runtime/ExceptionHandling.cs b/src/coreclr/nativeaot/Runtime.Base/src/System/Runtime/ExceptionHandling.cs index 3443e1bcb71..ef609ceaa61 100644 --- a/src/coreclr/nativeaot/Runtime.Base/src/System/Runtime/ExceptionHandling.cs +++ b/src/coreclr/nativeaot/Runtime.Base/src/System/Runtime/ExceptionHandling.cs @@ -550,6 +550,7 @@ namespace System.Runtime #if NATIVEAOT [RuntimeExport("RhThrowHwEx")] #endif + [StackTraceHidden] public static void RhThrowHwEx(uint exceptionCode, ref ExInfo exInfo) { #if NATIVEAOT @@ -624,6 +625,7 @@ namespace System.Runtime #if NATIVEAOT [RuntimeExport("RhThrowEx")] #endif + [StackTraceHidden] public static void RhThrowEx(object exceptionObj, ref ExInfo exInfo) { #if NATIVEAOT @@ -705,6 +707,7 @@ namespace System.Runtime #if NATIVEAOT [RuntimeExport("RhRethrow")] #endif + [StackTraceHidden] public static void RhRethrow(ref ExInfo activeExInfo, ref ExInfo exInfo) { #if NATIVEAOT @@ -722,6 +725,7 @@ namespace System.Runtime FallbackFailFast(RhFailFastReason.InternalError, null); } + [StackTraceHidden] private static void DispatchEx(scoped ref StackFrameIterator frameIter, ref ExInfo exInfo) { Debug.Assert(exInfo._passNumber == 1, "expected asm throw routine to set the pass"); @@ -977,6 +981,7 @@ namespace System.Runtime prevFramePtr = curFramePtr; } + [StackTraceHidden] private static bool FindFirstPassHandler(object exception, uint idxStart, ref StackFrameIterator frameIter, out uint tryRegionIdx, out byte* pHandler) { @@ -1134,6 +1139,7 @@ namespace System.Runtime { InvokeSecondPass(ref exInfo, idxStart, MaxTryRegionIdx); } + private static void InvokeSecondPass(ref ExInfo exInfo, uint idxStart, uint idxLimit) { EHEnum ehEnum;