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
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1182
Overwatch 2 verifies that every kernel callback that is run, lives in user32. Introduce a callback in user32 that just forwards to the other modules' callbacks.
I don't know what to call this kind of callback, I just called it "user32 callback" for now because it's going through user32 but that's not really a good name.
It also sadly necessitates a private \_\_wine export from user32, unless someone has a better idea for how to register the callbacks with user32.
--
v3: user32: Remove NtUserDriverCallback* kernel callbacks.
winex11.drv: Convert kernel callbacks to user32 callbacks.
winemac.drv: Convert kernel callbacks to user32 callbacks.
wineandroid.drv: Convert kernel callbacks to user32 callbacks.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1180
Overwatch 2 verifies that every kernel callback that is run, lives in user32. Introduce a callback in user32 that just forwards to the other modules' callbacks.
I don't know what to call this kind of callback, I just called it "user32 callback" for now because it's going through user32 but that's not really a good name.
It also sadly necessitates a private \_\_wine export from user32, unless someone has a better idea for how to register the callbacks with user32.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/1180
Overwatch 2 verifies that every kernel callback that is run, lives in user32. Introduce a callback in user32 that just forwards to the other modules' callbacks.
I don't know what to call this kind of callback, I just called it "user32 callback" for now because it's going through user32 but that's not really a good name.
It also sadly necessitates a private \_\_wine export from user32, unless someone has a better idea for how to register the callbacks with user32.
--
v2: user32: Remove NtUserDriverCallback* kernel callbacks.
winex11.drv: Convert kernel callbacks to user32 callbacks.
winemac.drv: Convert kernel callbacks to user32 callbacks.
wineandroid.drv: Convert kernel callbacks to user32 callbacks.
winevulkan: Convert kernel callbacks to user32 callbacks.
user.exe16: Convert kernel callbacks to user32 callbacks.
user32: Add user32 callback infrastructure.
https://gitlab.winehq.org/wine/wine/-/merge_requests/1180