ntdll: Add SEH unwind info in ARM assembly functions/trampolines.
commit2d43653a2e789ed67a3c66db92276783b849051c
authorMartin Storsjö <martin@martin.st>
Tue, 10 May 2022 21:52:10 +0000 (11 00:52 +0300)
committerAlexandre Julliard <julliard@winehq.org>
Tue, 7 Jun 2022 13:27:18 +0000 (7 15:27 +0200)
treeffe10e4d2c56a10cc5b804769aa3ec7143dfd360
parent9a8fdc724beb6b70b7ea503807a75b6dc5ab3752
ntdll: Add SEH unwind info in ARM assembly functions/trampolines.

Clang generates SEH unwind info on ARM in both MSVC and mingw mode
since Clang 15. The unwind info gets which gets enabled automatically
by building with a new enough compiler.

For functions/trampolines that are implemented in assembly, the unwind
information needs to be provided by hand - in particular for cases
where unwinding should be diverted.

Contrary to AArch64, Clang got SEH assembler directives directly from
the start when SEH was implemented (when the __SEH__ compiler define
gets set), so there's no need for compiler version checks (like for
AArch64 in include/wine/asm.h), but the default check for __SEH__
works fine for enabling the __ARM_SEH() macro.

Use a custom unwind opcode in the private opcode space for unwinding
to a specific CONTEXT instead of up to the caller. (Contrary to
AArch64, there's no specific unwind opcode for restoring a full
CONTEXT, but the unwind opcode space does have a couple
unallocated values marked as "available", which can be used
for vendor specific needs here.)

This fixes unwinding in ARM PE builds.

Signed-off-by: Martin Storsjö <martin@martin.st>
dlls/ntdll/signal_arm.c