From: Paul Gofman Subject: [PATCH] ntdll: Always align stack in call_user_apc_dispatcher() on x86_64. Message-Id: <20201012235218.807532-1-pgofman@codeweavers.com> Date: Tue, 13 Oct 2020 02:52:18 +0300 Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=49860 Signed-off-by: Paul Gofman --- Context passed to NtContinue() (which calls the faulting APC in the referenced bug's app) is the initial thread context. The fault itself is in combase.CoCreateInstance() which happens to use xmm0 for transferring arguments on stack. dlls/ntdll/unix/signal_x86_64.c | 1 + 1 file changed, 1 insertion(+) diff --git a/dlls/ntdll/unix/signal_x86_64.c b/dlls/ntdll/unix/signal_x86_64.c index e11b2c70b59..00b07c4270c 100644 --- a/dlls/ntdll/unix/signal_x86_64.c +++ b/dlls/ntdll/unix/signal_x86_64.c @@ -2011,6 +2011,7 @@ __ASM_GLOBAL_FUNC( call_user_apc_dispatcher, "jrcxz 1f\n\t" "movq 0x98(%rcx),%rax\n\t" /* context_ptr->Rsp */ "leaq -0x5c0(%rax),%rsp\n\t" /* sizeof(CONTEXT) + offsetof(frame,ret_addr) */ + "andq $~15,%rsp\n\t" "jmp 2f\n" "1:\tmovq 0x328(%rbx),%rax\n\t" /* amd64_thread_data()->syscall_frame */ "leaq -0x4d0(%rax),%rsp\n\t" -- 2.26.2