Module: wine Branch: master Commit: cd61eee30f3cf17fafd1ad329b30223dccb4ee33 URL: https://gitlab.winehq.org/wine/wine/-/commit/cd61eee30f3cf17fafd1ad329b30223...
Author: Jacek Caban jacek@codeweavers.com Date: Tue May 30 11:01:25 2023 +0200
ntdll: Get rid of hacks for direct unix calls.
---
dlls/ntdll/unix/signal_arm.c | 10 +--------- dlls/ntdll/unix/signal_arm64.c | 10 +--------- dlls/ntdll/unix/signal_i386.c | 10 +--------- dlls/ntdll/unix/signal_x86_64.c | 10 +--------- 4 files changed, 4 insertions(+), 36 deletions(-)
diff --git a/dlls/ntdll/unix/signal_arm.c b/dlls/ntdll/unix/signal_arm.c index 640ea39f5d9..f862610497f 100644 --- a/dlls/ntdll/unix/signal_arm.c +++ b/dlls/ntdll/unix/signal_arm.c @@ -1213,14 +1213,6 @@ NTSTATUS WINAPI KeUserModeCallback( ULONG id, const void *args, ULONG len, void void *args_data = (void *)((frame->sp - len) & ~15); ULONG_PTR *stack = args_data;
- /* if we have no syscall frame, call the callback directly */ - if ((char *)&frame < (char *)ntdll_get_thread_data()->kernel_stack || - (char *)&frame > (char *)arm_thread_data()->syscall_frame) - { - NTSTATUS (WINAPI *func)(const void *, ULONG) = ((void **)NtCurrentTeb()->Peb->KernelCallbackTable)[id]; - return func( args, len ); - } - if ((char *)ntdll_get_thread_data()->kernel_stack + min_kernel_stack > (char *)&frame) return STATUS_STACK_OVERFLOW;
@@ -1254,7 +1246,7 @@ static BOOL handle_syscall_fault( ucontext_t *context, EXCEPTION_RECORD *rec ) struct syscall_frame *frame = arm_thread_data()->syscall_frame; UINT i;
- if (!is_inside_syscall( context ) && !ntdll_get_thread_data()->jmp_buf) return FALSE; + if (!is_inside_syscall( context )) return FALSE;
TRACE( "code=%lx flags=%lx addr=%p pc=%08lx\n", rec->ExceptionCode, rec->ExceptionFlags, rec->ExceptionAddress, (DWORD)PC_sig(context) ); diff --git a/dlls/ntdll/unix/signal_arm64.c b/dlls/ntdll/unix/signal_arm64.c index dd492fef8fe..75ba53acda3 100644 --- a/dlls/ntdll/unix/signal_arm64.c +++ b/dlls/ntdll/unix/signal_arm64.c @@ -1169,14 +1169,6 @@ NTSTATUS WINAPI KeUserModeCallback( ULONG id, const void *args, ULONG len, void void *args_data = (void *)((frame->sp - len) & ~15); ULONG_PTR *stack = args_data;
- /* if we have no syscall frame, call the callback directly */ - if ((char *)&frame < (char *)ntdll_get_thread_data()->kernel_stack || - (char *)&frame > (char *)arm64_thread_data()->syscall_frame) - { - NTSTATUS (WINAPI *func)(const void *, ULONG) = ((void **)NtCurrentTeb()->Peb->KernelCallbackTable)[id]; - return func( args, len ); - } - if ((char *)ntdll_get_thread_data()->kernel_stack + min_kernel_stack > (char *)&frame) return STATUS_STACK_OVERFLOW;
@@ -1210,7 +1202,7 @@ static BOOL handle_syscall_fault( ucontext_t *context, EXCEPTION_RECORD *rec ) struct syscall_frame *frame = arm64_thread_data()->syscall_frame; DWORD i;
- if (!is_inside_syscall( context ) && !ntdll_get_thread_data()->jmp_buf) return FALSE; + if (!is_inside_syscall( context )) return FALSE;
TRACE( "code=%x flags=%x addr=%p pc=%p tid=%04x\n", rec->ExceptionCode, rec->ExceptionFlags, rec->ExceptionAddress, diff --git a/dlls/ntdll/unix/signal_i386.c b/dlls/ntdll/unix/signal_i386.c index 89af605443d..748828ad99e 100644 --- a/dlls/ntdll/unix/signal_i386.c +++ b/dlls/ntdll/unix/signal_i386.c @@ -1653,14 +1653,6 @@ NTSTATUS WINAPI KeUserModeCallback( ULONG id, const void *args, ULONG len, void void *args_data = (void *)((frame->esp - len) & ~15); ULONG_PTR *stack = args_data;
- /* if we have no syscall frame, call the callback directly */ - if ((char *)&frame < (char *)ntdll_get_thread_data()->kernel_stack || - (char *)&frame > (char *)x86_thread_data()->syscall_frame) - { - NTSTATUS (WINAPI *func)(const void *, ULONG) = ((void **)NtCurrentTeb()->Peb->KernelCallbackTable)[id]; - return func( args, len ); - } - if ((char *)ntdll_get_thread_data()->kernel_stack + min_kernel_stack > (char *)&frame) return STATUS_STACK_OVERFLOW;
@@ -1771,7 +1763,7 @@ static BOOL handle_syscall_fault( ucontext_t *sigcontext, void *stack_ptr, struct syscall_frame *frame = x86_thread_data()->syscall_frame; UINT i, *stack;
- if (!is_inside_syscall( sigcontext ) && !ntdll_get_thread_data()->jmp_buf) return FALSE; + if (!is_inside_syscall( sigcontext )) return FALSE;
TRACE( "code=%lx flags=%lx addr=%p ip=%08lx\n", rec->ExceptionCode, rec->ExceptionFlags, rec->ExceptionAddress, context->Eip ); diff --git a/dlls/ntdll/unix/signal_x86_64.c b/dlls/ntdll/unix/signal_x86_64.c index 2875ead70d4..0a233384c5c 100644 --- a/dlls/ntdll/unix/signal_x86_64.c +++ b/dlls/ntdll/unix/signal_x86_64.c @@ -1708,14 +1708,6 @@ NTSTATUS WINAPI KeUserModeCallback( ULONG id, const void *args, ULONG len, void void *args_data = (void *)((frame->rsp - len) & ~15); ULONG_PTR *stack = args_data;
- /* if we have no syscall frame, call the callback directly */ - if ((char *)&frame < (char *)ntdll_get_thread_data()->kernel_stack || - (char *)&frame > (char *)amd64_thread_data()->syscall_frame) - { - NTSTATUS (WINAPI *func)(const void *, ULONG) = ((void **)NtCurrentTeb()->Peb->KernelCallbackTable)[id]; - return func( args, len ); - } - if ((char *)ntdll_get_thread_data()->kernel_stack + min_kernel_stack > (char *)&frame) return STATUS_STACK_OVERFLOW;
@@ -1882,7 +1874,7 @@ static BOOL handle_syscall_fault( ucontext_t *sigcontext, EXCEPTION_RECORD *rec, struct syscall_frame *frame = amd64_thread_data()->syscall_frame; DWORD i;
- if (!is_inside_syscall( sigcontext ) && !ntdll_get_thread_data()->jmp_buf) return FALSE; + if (!is_inside_syscall( sigcontext )) return FALSE;
TRACE_(seh)( "code=%x flags=%x addr=%p ip=%lx tid=%04x\n", rec->ExceptionCode, rec->ExceptionFlags, rec->ExceptionAddress,