[Bug 49698] Unwinding with a PE based ntdll.dll fails in some cases

WineHQ Bugzilla wine-bugs at winehq.org
Wed Aug 12 15:46:15 CDT 2020


https://bugs.winehq.org/show_bug.cgi?id=49698

--- Comment #2 from Martin Storsjö <martin at martin.st> ---
(In reply to Paul Gofman from comment #1)
> Thanks for bringing in handy test case.
> 
> I've tested the test.
> 
> The regression was triggered solely by ntdll switch to PE and does not
> interfere with any other patches.
> 
> The problem is in dlls/ntdll/signal_x86_64.c:call_consolidate_callback()
> function.
> It is supposed to return to the caller (RtlSetThreadContext) in case of
> normal return but in case if the callback unwinds (which is likely) the
> unwind should jump directly to the specified context and skip all the
> functions in between with their unwinds (that is the feature of consolidated
> unwind which does the unwind for multiple nested frames in one call). The
> required tricks were implemented with dwarf unwind info but not for PE
> unwinds, thus it was broken as soon as ntdll.dll is build as PE.
> 
> Patches [1], [2] are fixing the issue for me.
> 
> 1. https://source.winehq.org/patches/data/190692
> 2. https://source.winehq.org/patches/data/190693

Awesome, thanks! Yeah I had a suspicion that call_consolidate_callback was the
culprit here (but I hadn't dug deep enough to actually verify it).

My reason for poking into it actually was that I was looking into fixing
unwinding for a PE based ntdll for arm64, but I didn't have any good clue for
how to handle call_consolidate_callback without the DWARF tricks, so I wanted
to look into how the x86_64 implementation worked in PE/SEH mode.

So - now I can try to do something similar to that with the ARM64 variant of
SEH. :-)

-- 
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.


More information about the wine-bugs mailing list