This change is adding DWARF (CFI) unwind information to the
hand-written assembly of the `__wine_syscall_dispatcher` function.
This enables unwinding through the dispatcher from the Linux stack
into (and through) the Windows stack.
The general idea is that the `syscall_frame` struct contains the
content of the callee-save registers before the function call
(in particular the stack pointer and the return address). At any
point of the execution, we have a pointer into the `syscall_frame`
in $ebx, $ecx, $ebp, or $esp.
For the CFI codes the general idea is that we are defining the
computations of the callee-save registers based on the
`syscall_frame` using DWARF’s `breg` instruction, rather than
relative to CFA.
cc/ @florian-kuebler
--
v2: ntdll: Add CFI unwind info to __wine_syscall_dispatcher (i386).
https://gitlab.winehq.org/wine/wine/-/merge_requests/1182
This series is mainly a change in internal structures for
describing functions:
- symt_function doesn't support multi range of addresses
- while symt_inlinesite does
That's the major difference between the two.
So the aim of this serie is to decribe function and inline sites with
a single structure.
--
v2: dbghelp: Get rid of symt_inlinesite by merging it inside symt_function.
dbghelp: Use addr_range for storing symt_function address and size.
dbghelp: Store address range as FAM in symt_inlinesite.
dbghelp: No longer pass inline site's address upon creation.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1161