X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Falphanbsd-tdep.c;h=bc1738595a671aebb5ac6405b636c58ed676013c;hb=0f4d39d53de83e8b4ecf0eb1fa85182074b04bc5;hp=013d8ed71fd1bf598dcf87ebc1478f38c5cc4706;hpb=a9762ec78a53fbe9209fe1654db42df0cd328d50;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/alphanbsd-tdep.c b/gdb/alphanbsd-tdep.c index 013d8ed71f..bc1738595a 100644 --- a/gdb/alphanbsd-tdep.c +++ b/gdb/alphanbsd-tdep.c @@ -1,6 +1,6 @@ /* Target-dependent code for NetBSD/alpha. - Copyright (C) 2002, 2003, 2004, 2006, 2007 Free Software Foundation, Inc. + Copyright (C) 2002-2004, 2006-2012 Free Software Foundation, Inc. Contributed by Wasabi Systems, Inc. @@ -34,6 +34,7 @@ #include "alphabsd-tdep.h" #include "nbsd-tdep.h" #include "solib-svr4.h" +#include "target.h" /* Core file support. */ @@ -209,13 +210,13 @@ static const unsigned char sigtramp_retcode[] = #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]; LONGEST off; int i; - if (read_memory_nobpt (pc, (char *) w, 4) != 0) + if (target_read_memory (pc, (char *) w, 4) != 0) return -1; for (i = 0; i < RETCODE_NWORDS; i++) @@ -229,7 +230,7 @@ alphanbsd_sigtramp_offset (CORE_ADDR pc) off = i * 4; pc -= off; - if (read_memory_nobpt (pc, (char *) ret, sizeof (ret)) != 0) + if (target_read_memory (pc, (char *) ret, sizeof (ret)) != 0) return -1; if (memcmp (ret, sigtramp_retcode, RETCODE_SIZE) == 0) @@ -239,10 +240,11 @@ alphanbsd_sigtramp_offset (CORE_ADDR pc) } 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 @@ -251,7 +253,9 @@ alphanbsd_sigcontext_addr (struct frame_info *frame) /* 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)); }