@@ -3228,8 +3228,11 @@ MONO_SIG_HANDLER_FUNC (, mono_sigfpe_signal_handler)
32283228
32293229 mono_sigctx_to_monoctx (ctx , & mctx );
32303230 if (mono_dump_start ())
3231- mono_handle_native_crash (mono_get_signame (SIGFPE ), & mctx , info , ctx );
3232- goto exit ;
3231+ mono_handle_native_crash (mono_get_signame (SIGFPE ), & mctx , info );
3232+ if (mono_do_crash_chaining ) {
3233+ mono_chain_signal (MONO_SIG_HANDLER_PARAMS );
3234+ goto exit ;
3235+ }
32333236 }
32343237
32353238 mono_arch_handle_exception (ctx , exc );
@@ -3250,10 +3253,14 @@ MONO_SIG_HANDLER_FUNC (, mono_crashing_signal_handler)
32503253 mono_sigctx_to_monoctx (ctx , & mctx );
32513254 if (mono_dump_start ())
32523255#if defined(HAVE_SIG_INFO ) && !defined(HOST_WIN32 ) // info is a siginfo_t
3253- mono_handle_native_crash (mono_get_signame (info -> si_signo ), & mctx , info , ctx );
3256+ mono_handle_native_crash (mono_get_signame (info -> si_signo ), & mctx , info );
32543257#else
3255- mono_handle_native_crash (mono_get_signame (SIGTERM ), & mctx , info , ctx );
3258+ mono_handle_native_crash (mono_get_signame (SIGTERM ), & mctx , info );
32563259#endif
3260+ if (mono_do_crash_chaining ) {
3261+ mono_chain_signal (MONO_SIG_HANDLER_PARAMS );
3262+ return ;
3263+ }
32573264}
32583265
32593266#if defined(MONO_ARCH_USE_SIGACTION ) || defined(HOST_WIN32 )
@@ -3333,7 +3340,11 @@ MONO_SIG_HANDLER_FUNC (, mono_sigsegv_signal_handler)
33333340 if (!mono_do_crash_chaining && mono_chain_signal (MONO_SIG_HANDLER_PARAMS ))
33343341 return ;
33353342 if (mono_dump_start ())
3336- mono_handle_native_crash (mono_get_signame (signo ), & mctx , info , ctx );
3343+ mono_handle_native_crash (mono_get_signame (signo ), & mctx , info );
3344+ if (mono_do_crash_chaining ) {
3345+ mono_chain_signal (MONO_SIG_HANDLER_PARAMS );
3346+ return ;
3347+ }
33373348 }
33383349#endif
33393350
@@ -3372,7 +3383,7 @@ MONO_SIG_HANDLER_FUNC (, mono_sigsegv_signal_handler)
33723383 } else {
33733384 // FIXME: This shouldn't run on the altstack
33743385 if (mono_dump_start ())
3375- mono_handle_native_crash (mono_get_signame (SIGSEGV ), & mctx , info , ctx );
3386+ mono_handle_native_crash (mono_get_signame (SIGSEGV ), & mctx , info );
33763387 }
33773388#endif
33783389 }
@@ -3383,14 +3394,23 @@ MONO_SIG_HANDLER_FUNC (, mono_sigsegv_signal_handler)
33833394 return ;
33843395
33853396 if (mono_dump_start ())
3386- mono_handle_native_crash (mono_get_signame (SIGSEGV ), & mctx , (MONO_SIG_HANDLER_INFO_TYPE * )info , ctx );
3397+ mono_handle_native_crash (mono_get_signame (SIGSEGV ), & mctx , (MONO_SIG_HANDLER_INFO_TYPE * )info );
3398+
3399+ if (mono_do_crash_chaining ) {
3400+ mono_chain_signal (MONO_SIG_HANDLER_PARAMS );
3401+ return ;
3402+ }
33873403 }
33883404
33893405 if (mono_is_addr_implicit_null_check (fault_addr )) {
33903406 mono_arch_handle_exception (ctx , NULL );
33913407 } else {
33923408 if (mono_dump_start ())
3393- mono_handle_native_crash (mono_get_signame (SIGSEGV ), & mctx , (MONO_SIG_HANDLER_INFO_TYPE * )info , ctx );
3409+ mono_handle_native_crash (mono_get_signame (SIGSEGV ), & mctx , (MONO_SIG_HANDLER_INFO_TYPE * )info );
3410+ if (mono_do_crash_chaining ) {
3411+ mono_chain_signal (MONO_SIG_HANDLER_PARAMS );
3412+ return ;
3413+ }
33943414 }
33953415#endif
33963416}
0 commit comments