diff options
author | Mark Kettenis <kettenis@gnu.org> | 2003-05-28 20:52:03 +0000 |
---|---|---|
committer | Mark Kettenis <kettenis@gnu.org> | 2003-05-28 20:52:03 +0000 |
commit | 4f078bbd6c94d431c8cfb48a9bf89351063a0767 (patch) | |
tree | 84853e8cad0215b34a098c1b5c3db8e5a1de76af | |
parent | f7e2f7efcffae8fca9d11e697e9fbd842ec93629 (diff) | |
download | binutils-gdb-4f078bbd6c94d431c8cfb48a9bf89351063a0767.tar.gz |
* x86-64-linux-tdep.c (x86_64_linux_sigcontext_addr): Fix.
-rw-r--r-- | gdb/ChangeLog | 4 | ||||
-rw-r--r-- | 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 <kettenis@gnu.org> + + * x86-64-linux-tdep.c (x86_64_linux_sigcontext_addr): Fix. + 2003-05-23 Mark Kettenis <kettenis@gnu.org> * 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; } |