https://bugs.winehq.org/show_bug.cgi?id=55584
Bug ID: 55584 Summary: Possibly incorrect handling of end_c in ARM64 process_unwind_codes Product: Wine Version: unspecified Hardware: aarch64 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: ntdll Assignee: wine-bugs@winehq.org Reporter: wine@corsix.org Distribution: ---
In signal_arm64.c, unwind code 0xe5 (end_c) is considered in three places: 1. get_sequence_len 2. The while loop at the start of process_unwind_codes which skips codes 3. The main while loop in process_unwind_codes which performs codes
Place 1 looks correct. Place 2 also looks fine, though I hope we'd never see end_c there (because we should only skip an amount identified by get_sequence_len). I am less certain about place 3 though; it currently treats end_c like end, whereas I think it should treat end_c like nop.
The documentation at https://learn.microsoft.com/en-us/cpp/build/arm64-exception-handling?view=ms... isn't great in describing end_c, though the example at "Unwind code for region 2" is a fairly clear example of end_c behaving like a nop for place 3.