/* Target-dependent code for NetBSD/alpha.
- Copyright (C) 2002, 2003, 2004, 2006, 2007, 2008
- Free Software Foundation, Inc.
+ Copyright (C) 2002-2013 Free Software Foundation, Inc.
Contributed by Wasabi Systems, Inc.
sequence and can then check whether we really are executing in the
signal trampoline. If not, -1 is returned, otherwise the offset from the
start of the return sequence is returned. */
-static const unsigned char sigtramp_retcode[] =
+static const gdb_byte sigtramp_retcode[] =
{
0x00, 0x00, 0x1e, 0xa6, /* ldq a0, 0(sp) */
0x10, 0x00, 0xde, 0x23, /* lda sp, 16(sp) */
#define RETCODE_SIZE (RETCODE_NWORDS * 4)
static LONGEST
-alphanbsd_sigtramp_offset (CORE_ADDR pc)
+alphanbsd_sigtramp_offset (struct gdbarch *gdbarch, CORE_ADDR pc)
{
- unsigned char ret[RETCODE_SIZE], w[4];
+ gdb_byte ret[RETCODE_SIZE], w[4];
LONGEST off;
int i;
- if (target_read_memory (pc, (char *) w, 4) != 0)
+ if (target_read_memory (pc, w, 4) != 0)
return -1;
for (i = 0; i < RETCODE_NWORDS; i++)
off = i * 4;
pc -= off;
- if (target_read_memory (pc, (char *) ret, sizeof (ret)) != 0)
+ if (target_read_memory (pc, ret, sizeof (ret)) != 0)
return -1;
if (memcmp (ret, sigtramp_retcode, RETCODE_SIZE) == 0)
}
static int
-alphanbsd_pc_in_sigtramp (CORE_ADDR pc, char *func_name)
+alphanbsd_pc_in_sigtramp (struct gdbarch *gdbarch,
+ CORE_ADDR pc, const char *func_name)
{
return (nbsd_pc_in_sigtramp (pc, func_name)
- || alphanbsd_sigtramp_offset (pc) >= 0);
+ || alphanbsd_sigtramp_offset (gdbarch, pc) >= 0);
}
static CORE_ADDR
/* FIXME: This is not correct for all versions of NetBSD/alpha.
We will probably need to disassemble the trampoline to figure
out which trampoline frame type we have. */
- return get_frame_base (frame);
+ if (!get_next_frame (frame))
+ return 0;
+ return get_frame_base (get_next_frame (frame));
}
\f