diff --git a/src/lephisto.c b/src/lephisto.c index 0f988a8..8520d0e 100644 --- a/src/lephisto.c +++ b/src/lephisto.c @@ -615,22 +615,31 @@ static void print_SDLversion(void) { static const char* debug_sigCodeToStr(int sig, int sig_code) { if(sig == SIGFPE) switch(sig_code) { - case FPE_INTDIV: return "SIGFPE (integer divide by zero)"; - case FPE_INTOVF: return "SIGFPE (integer overflow)"; - case FPE_FLTDIV: return "SIGFPE (floating-point divide by zero)"; - case FPE_FLTOVF: return "SIGFPE (floating-point overflow)"; - case FPE_FLTUND: return "SIGFPE (floating-point underflow)"; - case FPE_FLTRES: return "SIGFPE (floating-point inexact result)"; - case FPE_FLTINV: return "SIGFPE (floating-point invalid operation)"; - case FPE_FLTSUB: return "SIGFPE (subscript out of range)"; - default: return "SIGFPE"; + case SI_USER: return "SIGFPE (raised by program)"; + case FPE_INTDIV: return "SIGFPE (integer divide by zero)"; + case FPE_INTOVF: return "SIGFPE (integer overflow)"; + case FPE_FLTDIV: return "SIGFPE (floating-point divide by zero)"; + case FPE_FLTOVF: return "SIGFPE (floating-point overflow)"; + case FPE_FLTUND: return "SIGFPE (floating-point underflow)"; + case FPE_FLTRES: return "SIGFPE (floating-point inexact result)"; + case FPE_FLTINV: return "SIGFPE (floating-point invalid operation)"; + case FPE_FLTSUB: return "SIGFPE (subscript out of range)"; + default: return "SIGFPE"; } else if(sig == SIGSEGV) switch(sig_code) { + case SI_USER: return "SIGSEGV (raised by program)"; case SEGV_MAPERR: return "SIGEGV (address not mapped to object)"; case SEGV_ACCERR: return "SIGEGV (invalid permissions for mapped object)"; default: return "SIGSEGV"; } + else if(sig == SIGTRAP) + switch(sig_code) { + case SI_USER: return "SIGTRAP (raised by program)"; + case TRAP_BRKPT: return "SIGTRAP (process breakpoint)"; + case TRAP_TRACE: return "SIGTRAP (process trace trap)"; + default: return "SIGTRAP"; + } /* No suitable code found. */ return strsignal(sig); } @@ -681,6 +690,9 @@ static void debug_sigInit(void) { sigaction(SIGFPE, &sa, &so); if(so.sa_handler == SIG_IGN) DEBUG("Unable to set up SIGFPE signal handler."); + sigaction(SIGTRAP, &sa, &so); + if(so.sa_handler == SIG_IGN) + DEBUG("Unable to get set up SIGTRAP signal handler."); #endif /* #if defined(LINUX) && !defined(NODEBUG) */ }