diff --git a/stepmania/src/archutils/Unix/CrashHandler.cpp b/stepmania/src/archutils/Unix/CrashHandler.cpp index 2f88ac1782..2f41d56803 100644 --- a/stepmania/src/archutils/Unix/CrashHandler.cpp +++ b/stepmania/src/archutils/Unix/CrashHandler.cpp @@ -231,105 +231,6 @@ const char *SignalName( int signo ) #undef X } -const char *SignalCodeName( int signo, int code ) -{ - switch( code ) - { - case SI_USER: return "user signal"; - case SI_KERNEL: return "kernel signal"; - case SI_QUEUE: return "sigqueue signal"; - case SI_TIMER: return "timer expired"; - case SI_MESGQ: return "mesgq state changed"; - case SI_ASYNCIO: return "async I/O completed"; - case SI_SIGIO: return "queued SIGIO"; - } - - switch( signo ) - { - case SIGILL: - switch( code ) - { - case ILL_ILLOPC: return "illegal opcode"; - case ILL_ILLOPN: return "illegal operand"; - case ILL_ILLADR: return "illegal addressing mode"; - case ILL_ILLTRP: return "illegal trap"; - case ILL_PRVOPC: return "privileged opcode"; - case ILL_PRVREG: return "privileged register"; - case ILL_COPROC: return "coprocessor error"; - case ILL_BADSTK: return "internal stack error"; - } - break; - - case SIGFPE: - switch( code ) - { - case FPE_INTDIV: return "integer divide by zero"; - case FPE_INTOVF: return "integer overflow"; - case FPE_FLTDIV: return "floating point divide by zero"; - case FPE_FLTOVF: return "floating point overflow"; - case FPE_FLTUND: return "floating point underflow"; - case FPE_FLTRES: return "floating point inexact result"; - case FPE_FLTINV: return "floating point invalid operation"; - case FPE_FLTSUB: return "subscript out of range"; - } - break; - - case SIGSEGV: - switch( code ) - { - case SEGV_MAPERR: return "address not mapped"; - case SEGV_ACCERR: return "invalid permissions"; - } - break; - - case SIGBUS: - switch( code ) - { - case BUS_ADRALN: return "invalid address alignment"; - case BUS_ADRERR: return "non‐existent physical address"; - case BUS_OBJERR: return "object specific hardware error"; - } - break; - - case SIGTRAP: - switch( code ) - { - case TRAP_BRKPT: return "process breakpoint"; - case TRAP_TRACE: return "process trace trap"; - } - break; - - case SIGCHLD: - switch( code ) - { - case CLD_EXITED: return "child has exited"; - case CLD_KILLED: return "child was killed"; - case CLD_DUMPED: return "child terminated abnormally"; - case CLD_TRAPPED: return "traced child has trapped"; - case CLD_STOPPED: return "child has stopped"; - case CLD_CONTINUED: return "stopped child has continued"; - } - break; - - case SIGPOLL: - switch( code ) - { - case POLL_IN: return "data input available"; - case POLL_OUT: return "output buffers available"; - case POLL_MSG: return "input message available"; - case POLL_ERR: return "i/o error"; - case POLL_PRI: return "high priority input available"; - case POLL_HUP: return "device disconnected"; - } - break; - } - - static char buf[128]; - strcpy( buf, "Unknown code " ); - strcat( buf, itoa(code) ); - return buf; -} - static void RunCrashHandler( const CrashData *crash ) { if( g_pCrashHandlerArgv0 == NULL ) diff --git a/stepmania/src/archutils/Unix/CrashHandlerChild.cpp b/stepmania/src/archutils/Unix/CrashHandlerChild.cpp index 8581f25b9b..f68a94ef26 100644 --- a/stepmania/src/archutils/Unix/CrashHandlerChild.cpp +++ b/stepmania/src/archutils/Unix/CrashHandlerChild.cpp @@ -58,6 +58,107 @@ static void output_stack_trace( FILE *out, void **BacktracePointers ) } } +#if !defined(DARWIN) +const char *SignalCodeName( int signo, int code ) +{ + switch( code ) + { + case SI_USER: return "user signal"; + case SI_KERNEL: return "kernel signal"; + case SI_QUEUE: return "sigqueue signal"; + case SI_TIMER: return "timer expired"; + case SI_MESGQ: return "mesgq state changed"; + case SI_ASYNCIO: return "async I/O completed"; + case SI_SIGIO: return "queued SIGIO"; + } + + switch( signo ) + { + case SIGILL: + switch( code ) + { + case ILL_ILLOPC: return "illegal opcode"; + case ILL_ILLOPN: return "illegal operand"; + case ILL_ILLADR: return "illegal addressing mode"; + case ILL_ILLTRP: return "illegal trap"; + case ILL_PRVOPC: return "privileged opcode"; + case ILL_PRVREG: return "privileged register"; + case ILL_COPROC: return "coprocessor error"; + case ILL_BADSTK: return "internal stack error"; + } + break; + + case SIGFPE: + switch( code ) + { + case FPE_INTDIV: return "integer divide by zero"; + case FPE_INTOVF: return "integer overflow"; + case FPE_FLTDIV: return "floating point divide by zero"; + case FPE_FLTOVF: return "floating point overflow"; + case FPE_FLTUND: return "floating point underflow"; + case FPE_FLTRES: return "floating point inexact result"; + case FPE_FLTINV: return "floating point invalid operation"; + case FPE_FLTSUB: return "subscript out of range"; + } + break; + + case SIGSEGV: + switch( code ) + { + case SEGV_MAPERR: return "address not mapped"; + case SEGV_ACCERR: return "invalid permissions"; + } + break; + + case SIGBUS: + switch( code ) + { + case BUS_ADRALN: return "invalid address alignment"; + case BUS_ADRERR: return "non‐existent physical address"; + case BUS_OBJERR: return "object specific hardware error"; + } + break; + + case SIGTRAP: + switch( code ) + { + case TRAP_BRKPT: return "process breakpoint"; + case TRAP_TRACE: return "process trace trap"; + } + break; + + case SIGCHLD: + switch( code ) + { + case CLD_EXITED: return "child has exited"; + case CLD_KILLED: return "child was killed"; + case CLD_DUMPED: return "child terminated abnormally"; + case CLD_TRAPPED: return "traced child has trapped"; + case CLD_STOPPED: return "child has stopped"; + case CLD_CONTINUED: return "stopped child has continued"; + } + break; + + case SIGPOLL: + switch( code ) + { + case POLL_IN: return "data input available"; + case POLL_OUT: return "output buffers available"; + case POLL_MSG: return "input message available"; + case POLL_ERR: return "i/o error"; + case POLL_PRI: return "high priority input available"; + case POLL_HUP: return "device disconnected"; + } + break; + } + + static char buf[128]; + strcpy( buf, "Unknown code " ); + strcat( buf, itoa(code) ); + return buf; +} +#endif + /* Once we get here, we should be * safe to do whatever we want; * heavyweights like malloc and CString are OK. (Don't crash!) */ static void child_process() @@ -145,6 +246,7 @@ static void child_process() CString reason; switch( crash.type ) { +#if !defined(DARWIN) case CrashData::SIGNAL: { CString Signal = SignalName( crash.signal ); @@ -160,6 +262,7 @@ static void child_process() } break; } +#endif #if defined(DARWIN) case CrashData::OSX_EXCEPTION: diff --git a/stepmania/src/archutils/Unix/CrashHandlerInternal.h b/stepmania/src/archutils/Unix/CrashHandlerInternal.h index 52821fc103..638583fe41 100644 --- a/stepmania/src/archutils/Unix/CrashHandlerInternal.h +++ b/stepmania/src/archutils/Unix/CrashHandlerInternal.h @@ -42,7 +42,6 @@ struct CrashData #define CHILD_MAGIC_PARAMETER "--private-do-crash-handler" const char *SignalName( int signo ); -const char *SignalCodeName( int signo, int code ); #if defined(DARWIN) const char *ExceptionName( int signo );