diff options
author | 2015-02-26 11:07:57 +0000 | |
---|---|---|
committer | 2015-02-26 11:07:57 +0000 | |
commit | c5cb74eeb3ea13a9fbeb0ec26b5bad10c4b92e4a (patch) | |
tree | b9c18059c4879d1287591a69045df8443f0c6d39 /gdb/amd64fbsd-tdep.c | |
parent | Change // comment in gdb/compile/ (diff) | |
download | binutils-gdb-c5cb74eeb3ea13a9fbeb0ec26b5bad10c4b92e4a.tar.gz binutils-gdb-c5cb74eeb3ea13a9fbeb0ec26b5bad10c4b92e4a.tar.bz2 binutils-gdb-c5cb74eeb3ea13a9fbeb0ec26b5bad10c4b92e4a.zip |
Fix infinite recursion in amd64fbsd_sigcontext_addr
amd64fbsd_sigcontext_addr is using frame_unwind_register_unsigned to
fetch the stack pointer which results in infinite recursion. This
patch changes it to use get_frame_register to match the
sigcontext_addr methods in the i386-bsd and amd64-linux targets
instead.
gdb/ChangeLog:
2015-02-25 John Baldwin <jhb@freebsd.org>
* amd64fbsd-tdep.c (amd64fbsd_sigcontext_addr): Use
get_frame_register instead of frame_unwind_register_unsigned.
Diffstat (limited to 'gdb/amd64fbsd-tdep.c')
-rw-r--r-- | gdb/amd64fbsd-tdep.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/gdb/amd64fbsd-tdep.c b/gdb/amd64fbsd-tdep.c index 2d49cdf8460..abb0cab9602 100644 --- a/gdb/amd64fbsd-tdep.c +++ b/gdb/amd64fbsd-tdep.c @@ -37,12 +37,16 @@ static CORE_ADDR amd64fbsd_sigcontext_addr (struct frame_info *this_frame) { + struct gdbarch *gdbarch = get_frame_arch (this_frame); + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); CORE_ADDR sp; + gdb_byte buf[8]; /* The `struct sigcontext' (which really is an `ucontext_t' on FreeBSD/amd64) lives at a fixed offset in the signal frame. See <machine/sigframe.h>. */ - sp = frame_unwind_register_unsigned (this_frame, AMD64_RSP_REGNUM); + get_frame_register (this_frame, AMD64_RSP_REGNUM, buf); + sp = extract_unsigned_integer (buf, 8, byte_order); return sp + 16; } |