Merged
Conversation
…mes to match x64 behavior
Member
Author
|
The alternative solution would be to just detect |
filipnavara
commented
May 23, 2025
6 tasks
jkotas
reviewed
May 23, 2025
Co-authored-by: Jan Kotas <[email protected]>
Member
|
/ba-g unrelated timeouts |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Implement basic support for unwinding longjmp across managed frames to match x64 and old EH behavior.
Like other Windows platforms we get our exception handler called with
STATUS_LONGJMPexception. However, unlike 64-bit platforms we don't get the originaljmp_bufand return value in theExceptionInformationparameters. In order to handle the longjmp we need to return back from theProcessCLRExceptioncall which is currently not done anywhere else.The solution is a bit of an abuse. We create our own
setjmptrampoline fromProcessCLRExceptionand use that to return from lastCallCatchFuncletat the end ofDispatchEx. In order not to interfere with C++ unwinding we need to extract thesetjmpinto its own function with no C++ destructors on the frame.Also fix #115701 by calling
GCX_PREEMP_NO_DTORinPropagateLongJmpThroughNativeFrameswhile I am at it.Contributes to #113985