diff --git a/patches/ntdll-Syscall_Emulation/0001-ntdll-Support-x86_64-syscall-emulation.patch b/patches/ntdll-Syscall_Emulation/0001-ntdll-Support-x86_64-syscall-emulation.patch index 39ed1b56..05c7c9dc 100644 --- a/patches/ntdll-Syscall_Emulation/0001-ntdll-Support-x86_64-syscall-emulation.patch +++ b/patches/ntdll-Syscall_Emulation/0001-ntdll-Support-x86_64-syscall-emulation.patch @@ -1,4 +1,4 @@ -From 45df10c65cee279caac2184919c81e6b473bd3f8 Mon Sep 17 00:00:00 2001 +From 24c407828bf5606e25e2905dfb920556ec1347b8 Mon Sep 17 00:00:00 2001 From: Paul Gofman Date: Tue, 14 Jul 2020 15:00:34 +0300 Subject: [PATCH] ntdll: Support x86_64 syscall emulation. @@ -9,7 +9,7 @@ Subject: [PATCH] ntdll: Support x86_64 syscall emulation. 2 files changed, 193 insertions(+) diff --git a/configure.ac b/configure.ac -index b759c57f4a0..b72e5c59274 100644 +index bd655accac3..d581dbc1eae 100644 --- a/configure.ac +++ b/configure.ac @@ -420,6 +420,7 @@ AC_CHECK_HEADERS(\ @@ -21,7 +21,7 @@ index b759c57f4a0..b72e5c59274 100644 linux/types.h \ linux/ucdrom.h \ diff --git a/dlls/ntdll/unix/signal_x86_64.c b/dlls/ntdll/unix/signal_x86_64.c -index 0204139631f..117c238cf44 100644 +index 0c291633ac6..a28762915be 100644 --- a/dlls/ntdll/unix/signal_x86_64.c +++ b/dlls/ntdll/unix/signal_x86_64.c @@ -27,6 +27,7 @@ @@ -56,14 +56,14 @@ index 0204139631f..117c238cf44 100644 #include "ntstatus.h" #define WIN32_NO_STATUS #include "windef.h" -@@ -1773,6 +1784,186 @@ static inline DWORD is_privileged_instr( CONTEXT *context ) +@@ -1783,6 +1794,186 @@ static inline DWORD is_privileged_instr( CONTEXT *context ) return 0; } +#ifdef HAVE_SECCOMP +static void sigsys_handler( int signal, siginfo_t *siginfo, void *sigcontext ) +{ -+ extern void __wine_syscall_dispatcher_prolog_end(void); ++ extern const void *__wine_syscall_dispatcher_prolog_end_ptr; + struct syscall_frame *frame = amd64_thread_data()->syscall_frame; + ucontext_t *ctx = sigcontext; + @@ -84,7 +84,7 @@ index 0204139631f..117c238cf44 100644 + ctx->uc_mcontext.gregs[REG_RCX] = (ULONG_PTR)frame; + ctx->uc_mcontext.gregs[REG_R11] = frame->eflags; + ctx->uc_mcontext.gregs[REG_EFL] &= ~0x100; /* clear single-step flag */ -+ ctx->uc_mcontext.gregs[REG_RIP] = (ULONG64)__wine_syscall_dispatcher_prolog_end; ++ ctx->uc_mcontext.gregs[REG_RIP] = (ULONG64)__wine_syscall_dispatcher_prolog_end_ptr; +} +#endif + @@ -243,7 +243,7 @@ index 0204139631f..117c238cf44 100644 /*********************************************************************** * handle_interrupt -@@ -2448,6 +2639,7 @@ void signal_init_process(void) +@@ -2460,6 +2651,7 @@ void signal_init_process(void) if (sigaction( SIGSEGV, &sig_act, NULL ) == -1) goto error; if (sigaction( SIGILL, &sig_act, NULL ) == -1) goto error; if (sigaction( SIGBUS, &sig_act, NULL ) == -1) goto error; @@ -252,5 +252,5 @@ index 0204139631f..117c238cf44 100644 error: -- -2.41.0 +2.43.0