X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gdb%2Falphanbsd-tdep.c;h=d0d85ac907bdf066ce8e0b2f4f9287d7a9b236a8;hb=37cc8bfee6166ea05f1fa2e7d9f0f4d90663b7fc;hp=dc086523c74a2d443666e1944af52ec9f0a64f8b;hpb=9b254dd1ce46c19dde1dde5b8d1e22e862dfacce;p=binutils-gdb.git diff --git a/gdb/alphanbsd-tdep.c b/gdb/alphanbsd-tdep.c index dc086523c74..d0d85ac907b 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, 2008 + Copyright (C) 2002, 2003, 2004, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. Contributed by Wasabi Systems, Inc. @@ -35,6 +35,7 @@ #include "alphabsd-tdep.h" #include "nbsd-tdep.h" #include "solib-svr4.h" +#include "target.h" /* Core file support. */ @@ -210,13 +211,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++) @@ -230,7 +231,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) @@ -240,10 +241,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, 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 @@ -252,7 +254,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)); }