X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=gdb%2Falphanbsd-tdep.c;h=d0d85ac907bdf066ce8e0b2f4f9287d7a9b236a8;hb=e7fbb131d42983eec31231f8bb69cdd8d5a33ee6;hp=05c59062dcd857a7dc40976dc6077ca74c1e7ffe;hpb=359a926234e5b72f99e7e60d46b4886b5c9af0b2;p=binutils-gdb.git diff --git a/gdb/alphanbsd-tdep.c b/gdb/alphanbsd-tdep.c index 05c59062dcd..d0d85ac907b 100644 --- a/gdb/alphanbsd-tdep.c +++ b/gdb/alphanbsd-tdep.c @@ -1,6 +1,7 @@ /* Target-dependent code for NetBSD/alpha. - Copyright (C) 2002, 2003, 2004, 2006 Free Software Foundation, Inc. + Copyright (C) 2002, 2003, 2004, 2006, 2007, 2008, 2009, 2010 + Free Software Foundation, Inc. Contributed by Wasabi Systems, Inc. @@ -8,7 +9,7 @@ This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or + the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -17,9 +18,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. */ + along with this program. If not, see . */ #include "defs.h" #include "frame.h" @@ -36,6 +35,7 @@ #include "alphabsd-tdep.h" #include "nbsd-tdep.h" #include "solib-svr4.h" +#include "target.h" /* Core file support. */ @@ -211,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++) @@ -231,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) @@ -241,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 @@ -253,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)); }