From 4f078bbd6c94d431c8cfb48a9bf89351063a0767 Mon Sep 17 00:00:00 2001 From: Mark Kettenis Date: Wed, 28 May 2003 20:52:03 +0000 Subject: * x86-64-linux-tdep.c (x86_64_linux_sigcontext_addr): Fix. --- gdb/ChangeLog | 4 ++++ gdb/x86-64-linux-tdep.c | 11 ++++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 58a77877056..4465ef1ee4d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,7 @@ +2003-05-28 Mark Kettenis + + * x86-64-linux-tdep.c (x86_64_linux_sigcontext_addr): Fix. + 2003-05-23 Mark Kettenis * i386-tdep.c, dwarf-frame.c, dwarf-frame.h: Use dwarf2_ instead diff --git a/gdb/x86-64-linux-tdep.c b/gdb/x86-64-linux-tdep.c index aa75537bccc..5615ebd2681 100644 --- a/gdb/x86-64-linux-tdep.c +++ b/gdb/x86-64-linux-tdep.c @@ -107,7 +107,7 @@ x86_64_linux_pc_in_sigtramp (CORE_ADDR pc, char *name) static CORE_ADDR x86_64_linux_sigcontext_addr (struct frame_info *next_frame) { - CORE_ADDR sp, ucontext_addr; + CORE_ADDR sp; char buf[8]; frame_unwind_register (next_frame, SP_REGNUM, buf); @@ -115,10 +115,11 @@ x86_64_linux_sigcontext_addr (struct frame_info *next_frame) /* The sigcontext structure is part of the user context. A pointer to the user context is passed as the third argument to the signal - handler. */ - read_memory (sp + 16, buf, 8); - ucontext_addr = extract_unsigned_integer (buf, 8); - return ucontext_addr + X86_64_LINUX_UCONTEXT_SIGCONTEXT_OFFSET; + handler, i.e. in %rdx. Unfortunately %rdx isn't preserved across + function calls so we can't use it. Fortunately the user context + is part of the signal frame and the unwound %rsp directly points + at it. */ + return sp + X86_64_LINUX_UCONTEXT_SIGCONTEXT_OFFSET; } -- cgit v1.2.1