Commit 4934c127 authored by Martin Storsjö's avatar Martin Storsjö Committed by Alexandre Julliard

wow64: Use the right SEH opcode in raise_exception on arm64.

On ARM and ARM64, each SEH opcode is supposed to map to exactly one instruction; the operation of writing x29+x30 with a stack offset with writeback is called ".seh_save_fplr_x". Using the right opcode would fix inconsistent unwinding if we would unwind from near the end of the prologue (which is implausible here). However, clang/LLVM might also get checking for mismatches between SEH opcodes and the prolog/epilog ranges (https://reviews.llvm.org/D131394), mainly to guard against inconsistencies in the unwind info generated by the compiler, but that would trigger on this handwritten function too.
parent fd64cbc0
...@@ -421,8 +421,7 @@ __ASM_GLOBAL_FUNC( raise_exception, ...@@ -421,8 +421,7 @@ __ASM_GLOBAL_FUNC( raise_exception,
#elif defined(__aarch64__) #elif defined(__aarch64__)
__ASM_GLOBAL_FUNC( raise_exception, __ASM_GLOBAL_FUNC( raise_exception,
"stp x29, x30, [sp, #-32]!\n\t" "stp x29, x30, [sp, #-32]!\n\t"
__ASM_SEH(".seh_stackalloc 32\n\t") __ASM_SEH(".seh_save_fplr_x 32\n\t")
__ASM_SEH(".seh_save_fplr 0\n\t")
__ASM_SEH(".seh_endprologue\n\t") __ASM_SEH(".seh_endprologue\n\t")
__ASM_CFI(".cfi_def_cfa x29, 32\n\t") __ASM_CFI(".cfi_def_cfa x29, 32\n\t")
__ASM_CFI(".cfi_offset x30, -24\n\t") __ASM_CFI(".cfi_offset x30, -24\n\t")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment