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.
This commit is contained in:
parent
17487d857c
commit
c5cb74eeb3
2 changed files with 10 additions and 1 deletions
|
@ -1,3 +1,8 @@
|
|||
2015-02-25 John Baldwin <jhb@freebsd.org>
|
||||
|
||||
* amd64fbsd-tdep.c (amd64fbsd_sigcontext_addr): Use
|
||||
get_frame_register instead of frame_unwind_register_unsigned.
|
||||
|
||||
2015-02-26 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
PR build/18033
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue