diff --git a/stepmania/src/archutils/Unix/CrashHandler.cpp b/stepmania/src/archutils/Unix/CrashHandler.cpp index 812b169b19..69b0c49227 100644 --- a/stepmania/src/archutils/Unix/CrashHandler.cpp +++ b/stepmania/src/archutils/Unix/CrashHandler.cpp @@ -102,7 +102,7 @@ static void parent_process( int to_child, void **BacktracePointers, int SignalRe } /* 6. Write CHECKPOINTs. */ - p = GetCheckpointLogs("$$"); + p = GetCheckpointLogs("\n"); size = strlen(p)+1; parent_write(to_child, &size, sizeof(size)); parent_write(to_child, p, size); @@ -387,7 +387,8 @@ static void do_backtrace(void **buf, size_t size) #warning Undefined BACKTRACE_METHOD_* static void do_backtrace(void **buf, size_t size) { - buf[0] = NULL; + buf[0] = BACKTRACE_METHOD_NOT_AVAILABLE; + buf[1] = NULL; } #endif diff --git a/stepmania/src/archutils/Unix/CrashHandlerChild.cpp b/stepmania/src/archutils/Unix/CrashHandlerChild.cpp index e9c236ed02..a8cb5e44eb 100644 --- a/stepmania/src/archutils/Unix/CrashHandlerChild.cpp +++ b/stepmania/src/archutils/Unix/CrashHandlerChild.cpp @@ -274,6 +274,18 @@ void BacktraceNames::FromAddr( void *p ) static void output_stack_trace( FILE *out, void **BacktracePointers ) { + if( BacktracePointers[0] == BACKTRACE_METHOD_NOT_AVAILABLE ) + { + fprintf( out, "No backtrace method available.\n"); + return; + } + + if( !BacktracePointers[0] ) + { + fprintf( out, "Backtrace was empty.\n"); + return; + } + for( int i = 0; BacktracePointers[i]; ++i) { BacktraceNames bn; diff --git a/stepmania/src/archutils/Unix/CrashHandlerInternal.h b/stepmania/src/archutils/Unix/CrashHandlerInternal.h index 303d246d74..509a1eaaeb 100644 --- a/stepmania/src/archutils/Unix/CrashHandlerInternal.h +++ b/stepmania/src/archutils/Unix/CrashHandlerInternal.h @@ -4,5 +4,7 @@ #define BACKTRACE_MAX_SIZE 1024 #define CHILD_MAGIC_PARAMETER "--private-do-crash-handler" +#define BACKTRACE_METHOD_NOT_AVAILABLE ((void*) -1) + #endif