@@ -578,31 +578,22 @@ void handle_crash(int sig)
578578{
579579 // dump demangled stack trace
580580 void * array[1024 ];
581-
582581 int size = backtrace (array, 1024 );
583582
584583 {
585- char const * msg = " *** Program crashed (Segmentation fault, FPE, BUS, ABRT, KILL, Unhandled Exception, ...)\n Backtrace by DPL:\n " ;
586- auto retVal = write (STDERR_FILENO, msg, strlen (msg));
587- msg = " UNKNOWN SIGNAL\n " ;
588- if (sig == SIGSEGV) {
589- msg = " SEGMENTATION FAULT\n " ;
590- } else if (sig == SIGABRT) {
591- msg = " ABRT\n " ;
592- } else if (sig == SIGBUS) {
593- msg = " BUS ERROR\n " ;
594- } else if (sig == SIGILL) {
595- msg = " ILLEGAL INSTRUCTION\n " ;
596- } else if (sig == SIGFPE) {
584+ char buffer[1024 ];
585+ char const * msg = " *** Program crashed (%s)\n Backtrace by DPL:\n " ;
586+ snprintf (buffer, 1024 , msg, strsignal (sig));
587+ if (sig == SIGFPE) {
597588 if (std::fetestexcept (FE_DIVBYZERO)) {
598- msg = " FLOATING POINT EXCEPTION ( DIVISION BY ZERO) \n " ;
589+ snprintf (buffer, 1024 , msg, " FLOATING POINT EXCEPTION - DIVISION BY ZERO" ) ;
599590 } else if (std::fetestexcept (FE_INVALID)) {
600- msg = " FLOATING POINT EXCEPTION ( INVALID RESULT) \n " ;
591+ snprintf (buffer, 1024 , msg, " FLOATING POINT EXCEPTION - INVALID RESULT" ) ;
601592 } else {
602- msg = " FLOATING POINT EXCEPTION ( UNKNOWN REASON) \n " ;
593+ snprintf (buffer, 1024 , msg, " FLOATING POINT EXCEPTION - UNKNOWN REASON" ) ;
603594 }
604595 }
605- retVal = write (STDERR_FILENO, msg , strlen (msg ));
596+ auto retVal = write (STDERR_FILENO, buffer , strlen (buffer ));
606597 (void )retVal;
607598 }
608599 demangled_backtrace_symbols (array, size, STDERR_FILENO);
0 commit comments