From 4e5d43092654ffea815d5f64e9c9ea1f238050dc Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Fri, 19 Mar 2004 21:28:59 +0000 Subject: [PATCH] simplify don't need esp --- stepmania/src/archutils/Unix/Backtrace.cpp | 9 +++------ stepmania/src/archutils/Unix/Backtrace.h | 2 +- stepmania/src/archutils/Unix/LinuxThreadHelpers.cpp | 1 - 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/stepmania/src/archutils/Unix/Backtrace.cpp b/stepmania/src/archutils/Unix/Backtrace.cpp index feacb2c453..eabe10d74b 100644 --- a/stepmania/src/archutils/Unix/Backtrace.cpp +++ b/stepmania/src/archutils/Unix/Backtrace.cpp @@ -160,8 +160,7 @@ void InitializeBacktrace() /* We might have a different stack in the signal handler. Record a pointer * that lies in the real stack, so we can look it up later. */ - register void *esp __asm__ ("esp"); - SavedStackPointer = esp; + SavedStackPointer = __builtin_frame_address(0); } /* backtrace() for x86 Linux, tested with kernel 2.4.18, glibc 2.3.1. */ @@ -172,7 +171,7 @@ static void do_backtrace( const void **buf, size_t size, const BacktraceContext get_readable_ranges( readable_begin, readable_end, 1024 ); /* Find the stack memory blocks. */ - const int stack_block1 = find_address( (void *) ctx->esp, readable_begin, readable_end ); + const int stack_block1 = find_address( (void *) ctx->ebp, readable_begin, readable_end ); const int stack_block2 = find_address( SavedStackPointer, readable_begin, readable_end ); /* This matches the layout of the stack. The frame pointer makes the @@ -214,7 +213,6 @@ static void do_backtrace( const void **buf, size_t size, const BacktraceContext void GetSignalBacktraceContext( BacktraceContext *ctx, const ucontext_t *uc ) { - ctx->esp = (long) uc->uc_mcontext.gregs[REG_ESP]; ctx->eip = (long) uc->uc_mcontext.gregs[REG_EIP]; ctx->ebp = (long) uc->uc_mcontext.gregs[REG_EBP]; ctx->pid = GetCurrentThreadId(); @@ -229,10 +227,9 @@ void GetBacktrace( const void **buf, size_t size, const BacktraceContext *ctx ) { ctx = &CurrentCtx; - register void *esp __asm__ ("esp"); - CurrentCtx.esp = (long) esp; CurrentCtx.eip = 0; CurrentCtx.ebp = (long) __builtin_frame_address(0); + CurrentCtx.pid = GetCurrentThreadId(); } diff --git a/stepmania/src/archutils/Unix/Backtrace.h b/stepmania/src/archutils/Unix/Backtrace.h index 86c724e357..b5eec71697 100644 --- a/stepmania/src/archutils/Unix/Backtrace.h +++ b/stepmania/src/archutils/Unix/Backtrace.h @@ -7,7 +7,7 @@ struct BacktraceContext { #if defined(LINUX) - long eip, esp, ebp; + long eip, ebp; pid_t pid; #endif diff --git a/stepmania/src/archutils/Unix/LinuxThreadHelpers.cpp b/stepmania/src/archutils/Unix/LinuxThreadHelpers.cpp index 4a874c044f..d40d6fc41d 100644 --- a/stepmania/src/archutils/Unix/LinuxThreadHelpers.cpp +++ b/stepmania/src/archutils/Unix/LinuxThreadHelpers.cpp @@ -177,7 +177,6 @@ bool GetThreadBacktraceContext( int ThreadID, BacktraceContext *ctx ) ctx->pid = ThreadID; ctx->eip = regs.eip; - ctx->esp = regs.esp; ctx->ebp = regs.ebp; return true;