From 683583faf2f4b00874f702429393b127aca8eef4 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Sat, 6 Jun 2020 16:44:39 +0200 Subject: [PATCH] ntdll: Remove support for setting custom signal handlers. Signed-off-by: Alexandre Julliard --- dlls/ntdll/ntdll.spec | 3 --- dlls/ntdll/signal_arm.c | 51 +++++++++-------------------------- dlls/ntdll/signal_arm64.c | 34 +++--------------------- dlls/ntdll/signal_i386.c | 39 +++------------------------ dlls/ntdll/signal_powerpc.c | 53 +++++++++---------------------------- dlls/ntdll/signal_x86_64.c | 34 +++--------------------- 6 files changed, 33 insertions(+), 181 deletions(-) diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec index 766e458621a..ce5c580bd54 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec @@ -1601,9 +1601,6 @@ # Codepages @ cdecl __wine_get_unix_codepage() -# signal handling -@ cdecl __wine_set_signal_handler(long ptr) - # Filesystem @ cdecl wine_nt_to_unix_file_name(ptr ptr long long) @ cdecl wine_unix_to_nt_file_name(ptr ptr) diff --git a/dlls/ntdll/signal_arm.c b/dlls/ntdll/signal_arm.c index 101912f7ec1..a09848449a6 100644 --- a/dlls/ntdll/signal_arm.c +++ b/dlls/ntdll/signal_arm.c @@ -119,9 +119,6 @@ enum arm_trap_code }; typedef void (WINAPI *raise_func)( EXCEPTION_RECORD *rec, CONTEXT *context ); -typedef int (*wine_signal_handler)(unsigned int sig); - -static wine_signal_handler handlers[256]; /*********************************************************************** @@ -164,15 +161,6 @@ static inline WORD get_error_code( const ucontext_t *sigcontext ) #endif } -/*********************************************************************** - * dispatch_signal - */ -static inline int dispatch_signal(unsigned int sig) -{ - if (handlers[sig] == NULL) return 0; - return handlers[sig](sig); -} - /******************************************************************* * is_valid_frame */ @@ -700,22 +688,19 @@ static void fpe_handler( int signal, siginfo_t *siginfo, void *sigcontext ) */ static void int_handler( int signal, siginfo_t *siginfo, void *sigcontext ) { - if (!dispatch_signal(SIGINT)) - { - EXCEPTION_RECORD rec; - CONTEXT context; - NTSTATUS status; + EXCEPTION_RECORD rec; + CONTEXT context; + NTSTATUS status; - save_context( &context, sigcontext ); - rec.ExceptionCode = CONTROL_C_EXIT; - rec.ExceptionFlags = EXCEPTION_CONTINUABLE; - rec.ExceptionRecord = NULL; - rec.ExceptionAddress = (LPVOID)context.Pc; - rec.NumberParameters = 0; - status = raise_exception( &rec, &context, TRUE ); - if (status) raise_status( status, &rec ); - restore_context( &context, sigcontext ); - } + save_context( &context, sigcontext ); + rec.ExceptionCode = CONTROL_C_EXIT; + rec.ExceptionFlags = EXCEPTION_CONTINUABLE; + rec.ExceptionRecord = NULL; + rec.ExceptionAddress = (LPVOID)context.Pc; + rec.NumberParameters = 0; + status = raise_exception( &rec, &context, TRUE ); + if (status) raise_status( status, &rec ); + restore_context( &context, sigcontext ); } @@ -768,18 +753,6 @@ static void usr1_handler( int signal, siginfo_t *siginfo, void *sigcontext ) } -/*********************************************************************** - * __wine_set_signal_handler (NTDLL.@) - */ -int CDECL __wine_set_signal_handler(unsigned int sig, wine_signal_handler wsh) -{ - if (sig >= ARRAY_SIZE(handlers)) return -1; - if (handlers[sig] != NULL) return -2; - handlers[sig] = wsh; - return 0; -} - - /********************************************************************** * signal_init_process */ diff --git a/dlls/ntdll/signal_arm64.c b/dlls/ntdll/signal_arm64.c index 334c217b943..a9a58a2e7ad 100644 --- a/dlls/ntdll/signal_arm64.c +++ b/dlls/ntdll/signal_arm64.c @@ -141,10 +141,6 @@ struct stack_layout void *redzone[2]; }; -typedef int (*wine_signal_handler)(unsigned int sig); - -static wine_signal_handler handlers[256]; - struct arm64_thread_data { void *exit_frame; /* exit frame pointer */ @@ -159,15 +155,6 @@ static inline struct arm64_thread_data *arm64_thread_data(void) return (struct arm64_thread_data *)NtCurrentTeb()->SystemReserved2; } -/*********************************************************************** - * dispatch_signal - */ -static inline int dispatch_signal(unsigned int sig) -{ - if (handlers[sig] == NULL) return 0; - return handlers[sig](sig); -} - /*********************************************************************** * get_signal_stack * @@ -998,13 +985,10 @@ static void fpe_handler( int signal, siginfo_t *siginfo, void *sigcontext ) */ static void int_handler( int signal, siginfo_t *siginfo, void *sigcontext ) { - if (!dispatch_signal(SIGINT)) - { - struct stack_layout *stack = setup_exception( sigcontext ); + struct stack_layout *stack = setup_exception( sigcontext ); - stack->rec.ExceptionCode = CONTROL_C_EXIT; - setup_raise_exception( sigcontext, stack ); - } + stack->rec.ExceptionCode = CONTROL_C_EXIT; + setup_raise_exception( sigcontext, stack ); } @@ -1064,18 +1048,6 @@ static void usr2_handler( int signal, siginfo_t *siginfo, void *sigcontext ) } -/*********************************************************************** - * __wine_set_signal_handler (NTDLL.@) - */ -int CDECL __wine_set_signal_handler(unsigned int sig, wine_signal_handler wsh) -{ - if (sig >= ARRAY_SIZE(handlers)) return -1; - if (handlers[sig] != NULL) return -2; - handlers[sig] = wsh; - return 0; -} - - /********************************************************************** * signal_init_process */ diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c index 568fa34f18f..83868f25121 100644 --- a/dlls/ntdll/signal_i386.c +++ b/dlls/ntdll/signal_i386.c @@ -442,12 +442,8 @@ struct stack_layout DWORD eip; }; -typedef int (*wine_signal_handler)(unsigned int sig); - static ULONG first_ldt_entry = 32; -static wine_signal_handler handlers[256]; - enum i386_trap_code { TRAP_x86_UNKNOWN = -1, /* Unknown fault (TRAP_sig not defined) */ @@ -551,16 +547,6 @@ static inline int ldt_is_system( WORD sel ) return is_gdt_sel( sel ) || ((sel >> 3) < first_ldt_entry); } -/*********************************************************************** - * dispatch_signal - */ -static inline int dispatch_signal(unsigned int sig) -{ - if (handlers[sig] == NULL) return 0; - return handlers[sig](sig); -} - - /*********************************************************************** * get_trap_code * @@ -1800,19 +1786,12 @@ static void fpe_handler( int signal, siginfo_t *siginfo, void *sigcontext ) * int_handler * * Handler for SIGINT. - * - * FIXME: should not be calling external functions on the signal stack. */ static void int_handler( int signal, siginfo_t *siginfo, void *sigcontext ) { - WORD fs, gs; - void *stack_ptr = init_handler( sigcontext, &fs, &gs ); - if (!dispatch_signal(SIGINT)) - { - struct stack_layout *stack = setup_exception_record( sigcontext, stack_ptr, fs, gs ); - stack->rec.ExceptionCode = CONTROL_C_EXIT; - setup_raise_exception( sigcontext, stack ); - } + struct stack_layout *stack = setup_exception( sigcontext ); + stack->rec.ExceptionCode = CONTROL_C_EXIT; + setup_raise_exception( sigcontext, stack ); } /********************************************************************** @@ -1859,18 +1838,6 @@ static void usr1_handler( int signal, siginfo_t *siginfo, void *sigcontext ) } -/*********************************************************************** - * __wine_set_signal_handler (NTDLL.@) - */ -int CDECL __wine_set_signal_handler(unsigned int sig, wine_signal_handler wsh) -{ - if (sig >= ARRAY_SIZE(handlers)) return -1; - if (handlers[sig] != NULL) return -2; - handlers[sig] = wsh; - return 0; -} - - /********************************************************************** * signal_init_process */ diff --git a/dlls/ntdll/signal_powerpc.c b/dlls/ntdll/signal_powerpc.c index e4c30f38a4e..879b2b58c49 100644 --- a/dlls/ntdll/signal_powerpc.c +++ b/dlls/ntdll/signal_powerpc.c @@ -140,20 +140,6 @@ SIGFPE #endif /* __APPLE__ */ - -typedef int (*wine_signal_handler)(unsigned int sig); - -static wine_signal_handler handlers[256]; - -/*********************************************************************** - * dispatch_signal - */ -static inline int dispatch_signal(unsigned int sig) -{ - if (handlers[sig] == NULL) return 0; - return handlers[sig](sig); -} - /*********************************************************************** * save_context * @@ -599,22 +585,19 @@ static void fpe_handler( int signal, siginfo_t *siginfo, void *sigcontext ) */ static void int_handler( int signal, siginfo_t *siginfo, void *sigcontext ) { - if (!dispatch_signal(SIGINT)) - { - EXCEPTION_RECORD rec; - CONTEXT context; - NTSTATUS status; + EXCEPTION_RECORD rec; + CONTEXT context; + NTSTATUS status; - save_context( &context, sigcontext ); - rec.ExceptionCode = CONTROL_C_EXIT; - rec.ExceptionFlags = EXCEPTION_CONTINUABLE; - rec.ExceptionRecord = NULL; - rec.ExceptionAddress = (LPVOID)context.Iar; - rec.NumberParameters = 0; - status = raise_exception( &rec, &context, TRUE ); - if (status) raise_status( status, &rec ); - restore_context( &context, sigcontext ); - } + save_context( &context, sigcontext ); + rec.ExceptionCode = CONTROL_C_EXIT; + rec.ExceptionFlags = EXCEPTION_CONTINUABLE; + rec.ExceptionRecord = NULL; + rec.ExceptionAddress = (LPVOID)context.Iar; + rec.NumberParameters = 0; + status = raise_exception( &rec, &context, TRUE ); + if (status) raise_status( status, &rec ); + restore_context( &context, sigcontext ); } @@ -667,18 +650,6 @@ static void usr1_handler( int signal, siginfo_t *siginfo, void *sigcontext ) } -/*********************************************************************** - * __wine_set_signal_handler (NTDLL.@) - */ -int CDECL __wine_set_signal_handler(unsigned int sig, wine_signal_handler wsh) -{ - if (sig >= ARRAY_SIZE(handlers)) return -1; - if (handlers[sig] != NULL) return -2; - handlers[sig] = wsh; - return 0; -} - - /********************************************************************** * signal_init_process */ diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c index 225cb981b07..c6b0fbf618d 100644 --- a/dlls/ntdll/signal_x86_64.c +++ b/dlls/ntdll/signal_x86_64.c @@ -292,10 +292,6 @@ struct stack_layout ULONG64 red_zone[16]; }; -typedef int (*wine_signal_handler)(unsigned int sig); - -static wine_signal_handler handlers[256]; - struct amd64_thread_data { DWORD_PTR dr0; /* debug registers */ @@ -1634,15 +1630,6 @@ static NTSTATUS virtual_unwind( ULONG type, DISPATCHER_CONTEXT *dispatch, CONTEX return STATUS_SUCCESS; } -/*********************************************************************** - * dispatch_signal - */ -static inline int dispatch_signal(unsigned int sig) -{ - if (handlers[sig] == NULL) return 0; - return handlers[sig](sig); -} - /*********************************************************************** * get_signal_stack * @@ -2705,12 +2692,9 @@ static void fpe_handler( int signal, siginfo_t *siginfo, void *sigcontext ) */ static void int_handler( int signal, siginfo_t *siginfo, void *sigcontext ) { - if (!dispatch_signal(SIGINT)) - { - struct stack_layout *stack = setup_exception( sigcontext ); - stack->rec.ExceptionCode = CONTROL_C_EXIT; - setup_raise_exception( sigcontext, stack ); - } + struct stack_layout *stack = setup_exception( sigcontext ); + stack->rec.ExceptionCode = CONTROL_C_EXIT; + setup_raise_exception( sigcontext, stack ); } @@ -2754,18 +2738,6 @@ static void usr1_handler( int signal, siginfo_t *siginfo, void *ucontext ) } -/*********************************************************************** - * __wine_set_signal_handler (NTDLL.@) - */ -int CDECL __wine_set_signal_handler(unsigned int sig, wine_signal_handler wsh) -{ - if (sig >= ARRAY_SIZE(handlers)) return -1; - if (handlers[sig] != NULL) return -2; - handlers[sig] = wsh; - return 0; -} - - /********************************************************************** * signal_init_process */