move SignalCodeName to CrashHandlerChild; not used on DARWIN
This commit is contained in:
@@ -231,105 +231,6 @@ const char *SignalName( int signo )
|
|||||||
#undef X
|
#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 )
|
static void RunCrashHandler( const CrashData *crash )
|
||||||
{
|
{
|
||||||
if( g_pCrashHandlerArgv0 == NULL )
|
if( g_pCrashHandlerArgv0 == NULL )
|
||||||
|
|||||||
@@ -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;
|
/* Once we get here, we should be * safe to do whatever we want;
|
||||||
* heavyweights like malloc and CString are OK. (Don't crash!) */
|
* heavyweights like malloc and CString are OK. (Don't crash!) */
|
||||||
static void child_process()
|
static void child_process()
|
||||||
@@ -145,6 +246,7 @@ static void child_process()
|
|||||||
CString reason;
|
CString reason;
|
||||||
switch( crash.type )
|
switch( crash.type )
|
||||||
{
|
{
|
||||||
|
#if !defined(DARWIN)
|
||||||
case CrashData::SIGNAL:
|
case CrashData::SIGNAL:
|
||||||
{
|
{
|
||||||
CString Signal = SignalName( crash.signal );
|
CString Signal = SignalName( crash.signal );
|
||||||
@@ -160,6 +262,7 @@ static void child_process()
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(DARWIN)
|
#if defined(DARWIN)
|
||||||
case CrashData::OSX_EXCEPTION:
|
case CrashData::OSX_EXCEPTION:
|
||||||
|
|||||||
@@ -42,7 +42,6 @@ struct CrashData
|
|||||||
#define CHILD_MAGIC_PARAMETER "--private-do-crash-handler"
|
#define CHILD_MAGIC_PARAMETER "--private-do-crash-handler"
|
||||||
|
|
||||||
const char *SignalName( int signo );
|
const char *SignalName( int signo );
|
||||||
const char *SignalCodeName( int signo, int code );
|
|
||||||
|
|
||||||
#if defined(DARWIN)
|
#if defined(DARWIN)
|
||||||
const char *ExceptionName( int signo );
|
const char *ExceptionName( int signo );
|
||||||
|
|||||||
Reference in New Issue
Block a user