From 1bc7eca560fb35c7bfcc86a7ffefac19f8424021 Mon Sep 17 00:00:00 2001 From: Bernhard Urban Date: Mon, 12 Dec 2016 15:28:41 +0100 Subject: [PATCH] [exception] pass signal as string already to mono_handle_native_sigsegv --- mono/mini/exceptions-amd64.c | 4 ++-- mono/mini/exceptions-ppc.c | 2 +- mono/mini/exceptions-x86.c | 4 ++-- mono/mini/mini-exceptions.c | 7 +++---- mono/mini/mini-posix.c | 2 +- mono/mini/mini-runtime.c | 6 +++--- mono/mini/mini.h | 2 +- 7 files changed, 13 insertions(+), 14 deletions(-) diff --git a/mono/mini/exceptions-amd64.c b/mono/mini/exceptions-amd64.c index d0acb219f8e..304135e6c9f 100644 --- a/mono/mini/exceptions-amd64.c +++ b/mono/mini/exceptions-amd64.c @@ -58,7 +58,7 @@ static LONG CALLBACK seh_unhandled_exception_filter(EXCEPTION_POINTERS* ep) } #endif - mono_handle_native_sigsegv (SIGSEGV, NULL, NULL); + mono_handle_native_sigsegv ("SIGSEGV", NULL, NULL); return EXCEPTION_CONTINUE_SEARCH; } @@ -777,7 +777,7 @@ altstack_handle_and_restore (MonoContext *ctx, MonoObject *obj, gboolean stack_o MonoJitInfo *ji = mini_jit_info_table_find (mono_domain_get (), MONO_CONTEXT_GET_IP (ctx), NULL); if (!ji) - mono_handle_native_sigsegv (SIGSEGV, NULL, NULL); + mono_handle_native_sigsegv ("SIGSEGV", NULL, NULL); mctx = *ctx; diff --git a/mono/mini/exceptions-ppc.c b/mono/mini/exceptions-ppc.c index 684d2d9a469..238de087412 100644 --- a/mono/mini/exceptions-ppc.c +++ b/mono/mini/exceptions-ppc.c @@ -666,7 +666,7 @@ mono_arch_handle_altstack_exception (void *sigctx, MONO_SIG_HANDLER_INFO_TYPE *s abort (); } if (!ji) - mono_handle_native_sigsegv (SIGSEGV, sigctx, siginfo); + mono_handle_native_sigsegv ("SIGSEGV", sigctx, siginfo); /* setup a call frame on the real stack so that control is returned there * and exception handling can continue. * The frame looks like: diff --git a/mono/mini/exceptions-x86.c b/mono/mini/exceptions-x86.c index fe0957fa3f2..f2943c89ed1 100644 --- a/mono/mini/exceptions-x86.c +++ b/mono/mini/exceptions-x86.c @@ -62,7 +62,7 @@ LONG CALLBACK seh_unhandled_exception_filter(EXCEPTION_POINTERS* ep) } #endif - mono_handle_native_sigsegv (SIGSEGV, NULL, NULL); + mono_handle_native_sigsegv ("SIGSEGV", NULL, NULL); return EXCEPTION_CONTINUE_SEARCH; } @@ -1112,7 +1112,7 @@ mono_arch_handle_altstack_exception (void *sigctx, MONO_SIG_HANDLER_INFO_TYPE *s if (stack_ovf) exc = mono_domain_get ()->stack_overflow_ex; if (!ji) - mono_handle_native_sigsegv (SIGSEGV, sigctx, siginfo); + mono_handle_native_sigsegv ("SIGSEGV", sigctx, siginfo); /* setup a call frame on the real stack so that control is returned there * and exception handling can continue. * If this was a stack overflow the caller already ensured the stack pages diff --git a/mono/mini/mini-exceptions.c b/mono/mini/mini-exceptions.c index 789067ac03c..cc51f543927 100644 --- a/mono/mini/mini-exceptions.c +++ b/mono/mini/mini-exceptions.c @@ -2431,13 +2431,12 @@ static gboolean handling_sigsegv = FALSE; * information and aborting. */ void -mono_handle_native_sigsegv (int signal, void *ctx, MONO_SIG_HANDLER_INFO_TYPE *info) +mono_handle_native_sigsegv (const char *signal, void *ctx, MONO_SIG_HANDLER_INFO_TYPE *info) { #ifdef MONO_ARCH_USE_SIGACTION struct sigaction sa; #endif MonoJitTlsData *jit_tls = (MonoJitTlsData *)mono_native_tls_get_value (mono_jit_tls_id); - const char *signal_str = (signal == SIGSEGV) ? "SIGSEGV" : "SIGABRT"; if (handling_sigsegv) return; @@ -2532,7 +2531,7 @@ mono_handle_native_sigsegv (int signal, void *ctx, MONO_SIG_HANDLER_INFO_TYPE *i "a fatal error in the mono runtime or one of the native libraries \n" "used by your application.\n" "=================================================================\n", - signal_str); + signal); #ifdef MONO_ARCH_USE_SIGACTION @@ -2559,7 +2558,7 @@ mono_handle_native_sigsegv (int signal, void *ctx, MONO_SIG_HANDLER_INFO_TYPE *i #else void -mono_handle_native_sigsegv (int signal, void *ctx, MONO_SIG_HANDLER_INFO_TYPE *info) +mono_handle_native_sigsegv (const char *signal, void *ctx, MONO_SIG_HANDLER_INFO_TYPE *info) { g_assert_not_reached (); } diff --git a/mono/mini/mini-posix.c b/mono/mini/mini-posix.c index dad5d86218e..7f3082be2c0 100644 --- a/mono/mini/mini-posix.c +++ b/mono/mini/mini-posix.c @@ -220,7 +220,7 @@ MONO_SIG_HANDLER_FUNC (static, sigabrt_signal_handler) if (!ji) { if (mono_chain_signal (MONO_SIG_HANDLER_PARAMS)) return; - mono_handle_native_sigsegv (SIGABRT, ctx, info); + mono_handle_native_sigsegv ("SIGABRT", ctx, info); } } diff --git a/mono/mini/mini-runtime.c b/mono/mini/mini-runtime.c index 0a624ee0635..932b859facd 100644 --- a/mono/mini/mini-runtime.c +++ b/mono/mini/mini-runtime.c @@ -2850,7 +2850,7 @@ MONO_SIG_HANDLER_FUNC (, mono_sigfpe_signal_handler) if (!mono_do_crash_chaining && mono_chain_signal (MONO_SIG_HANDLER_PARAMS)) return; - mono_handle_native_sigsegv (SIGSEGV, ctx, info); + mono_handle_native_sigsegv ("SIGFPE", ctx, info); if (mono_do_crash_chaining) { mono_chain_signal (MONO_SIG_HANDLER_PARAMS); return; @@ -2916,7 +2916,7 @@ MONO_SIG_HANDLER_FUNC (, mono_sigsegv_signal_handler) if (!mono_domain_get () || !jit_tls) { if (!mono_do_crash_chaining && mono_chain_signal (MONO_SIG_HANDLER_PARAMS)) return; - mono_handle_native_sigsegv (SIGSEGV, ctx, info); + mono_handle_native_sigsegv ("SIGSEGV", ctx, info); if (mono_do_crash_chaining) { mono_chain_signal (MONO_SIG_HANDLER_PARAMS); return; @@ -2963,7 +2963,7 @@ MONO_SIG_HANDLER_FUNC (, mono_sigsegv_signal_handler) if (!mono_do_crash_chaining && mono_chain_signal (MONO_SIG_HANDLER_PARAMS)) return; - mono_handle_native_sigsegv (SIGSEGV, ctx, info); + mono_handle_native_sigsegv ("SIGSEGV", ctx, info); if (mono_do_crash_chaining) { mono_chain_signal (MONO_SIG_HANDLER_PARAMS); diff --git a/mono/mini/mini.h b/mono/mini/mini.h index b3eb72a0d3f..a4b2cb23dc1 100644 --- a/mono/mini/mini.h +++ b/mono/mini/mini.h @@ -2850,7 +2850,7 @@ typedef gboolean (*MonoJitStackWalk) (StackFrameInfo *frame, MonoCont void mono_exceptions_init (void); gboolean mono_handle_exception (MonoContext *ctx, MonoObject *obj); -void mono_handle_native_sigsegv (int signal, void *sigctx, MONO_SIG_HANDLER_INFO_TYPE *siginfo); +void mono_handle_native_sigsegv (const char *signal, void *sigctx, MONO_SIG_HANDLER_INFO_TYPE *siginfo); MONO_API void mono_print_thread_dump (void *sigctx); MONO_API void mono_print_thread_dump_from_ctx (MonoContext *ctx); void mono_walk_stack_with_ctx (MonoJitStackWalk func, MonoContext *start_ctx, MonoUnwindOptions unwind_options, void *user_data); -- 2.25.1