From c48c1e1802a8c46ff6778512bf58a1c6dbed7709 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Sun, 4 Apr 2004 20:49:24 +0000 Subject: [PATCH] fix top stack frame sometimes being lost --- stepmania/src/archutils/Unix/Backtrace.cpp | 5 +++++ stepmania/src/archutils/Unix/Backtrace.h | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/stepmania/src/archutils/Unix/Backtrace.cpp b/stepmania/src/archutils/Unix/Backtrace.cpp index 3dbc916acf..f9cc5e6e0c 100644 --- a/stepmania/src/archutils/Unix/Backtrace.cpp +++ b/stepmania/src/archutils/Unix/Backtrace.cpp @@ -383,6 +383,7 @@ typedef struct Frame void GetExceptionBacktraceContext( BacktraceContext *ctx, const ExceptionInformation *exception ) { + ctx->PC = (void *) exception->machineState->PC.lo; ctx->FramePtr = (void *) exception->registerImage->R1.lo; } @@ -398,11 +399,15 @@ void GetBacktrace( const void **buf, size_t size, const BacktraceContext *ctx ) /* __builtin_frame_address is broken on OS X; it sometimes returns bogus results. */ register void *r1 __asm__ ("r1"); CurrentCtx.FramePtr = (void *) r1; + CurrentCtx.PC = NULL; } const Frame *frame = (Frame *) ctx->FramePtr; unsigned i = 0; + if( ctx->PC && i < size-1 ) + buf[i++] = ctx->PC; + while( frame && i < size-1 ) // -1 for NULL { if( frame->linkReg ) diff --git a/stepmania/src/archutils/Unix/Backtrace.h b/stepmania/src/archutils/Unix/Backtrace.h index d050132c3d..8a833a12eb 100644 --- a/stepmania/src/archutils/Unix/Backtrace.h +++ b/stepmania/src/archutils/Unix/Backtrace.h @@ -12,7 +12,7 @@ struct BacktraceContext #endif #if defined(DARWIN) - void *FramePtr; + void *FramePtr, *PC; #endif };