[Add] Let's catch SIGTRAP too.

This commit is contained in:
Allanis 2013-11-26 19:32:27 +00:00
parent 58ee934426
commit 8716d14016

View File

@ -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) */
}