X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Falphaobsd-tdep.c;h=4e435272796ef6fad2532fbe06d694fd3f7187fb;hb=53a71c068156f7c35e07ddd5c0cce97bf98c025c;hp=58b4f8aa2b55aaec17a8acfa059ce41889fe64e3;hpb=6ea0ec3fe426986de1453f3f71d1f2f83a5029d6;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/alphaobsd-tdep.c b/gdb/alphaobsd-tdep.c index 58b4f8aa2b..4e43527279 100644 --- a/gdb/alphaobsd-tdep.c +++ b/gdb/alphaobsd-tdep.c @@ -1,12 +1,12 @@ /* Target-dependent code for OpenBSD/alpha. - Copyright (C) 2006 Free Software Foundation, Inc. + Copyright (C) 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. This file is part of GDB. 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, @@ -15,9 +15,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" @@ -42,13 +40,14 @@ static const int alphaobsd_page_size = 8192; static LONGEST -alphaobsd_sigtramp_offset (CORE_ADDR pc) +alphaobsd_sigtramp_offset (struct gdbarch *gdbarch, CORE_ADDR pc) { return (pc & (alphaobsd_page_size - 1)); } static int -alphaobsd_pc_in_sigtramp (CORE_ADDR pc, char *name) +alphaobsd_pc_in_sigtramp (struct gdbarch *gdbarch, + CORE_ADDR pc, char *name) { CORE_ADDR start_pc = (pc & ~(alphaobsd_page_size - 1)); unsigned insn; @@ -57,12 +56,12 @@ alphaobsd_pc_in_sigtramp (CORE_ADDR pc, char *name) return 0; /* Check for "". */ - insn = alpha_read_insn (start_pc + 5 * ALPHA_INSN_SIZE); + insn = alpha_read_insn (gdbarch, start_pc + 5 * ALPHA_INSN_SIZE); if (insn != 0x201f0067) return 0; /* Check for "". */ - insn = alpha_read_insn (start_pc + 6 * ALPHA_INSN_SIZE); + insn = alpha_read_insn (gdbarch, start_pc + 6 * ALPHA_INSN_SIZE); if (insn != 0x00000083) return 0; @@ -70,26 +69,27 @@ alphaobsd_pc_in_sigtramp (CORE_ADDR pc, char *name) } static CORE_ADDR -alphaobsd_sigcontext_addr (struct frame_info *next_frame) +alphaobsd_sigcontext_addr (struct frame_info *this_frame) { - CORE_ADDR pc = frame_pc_unwind (next_frame); + struct gdbarch *gdbarch = get_frame_arch (this_frame); + CORE_ADDR pc = get_frame_pc (this_frame); - if (alphaobsd_sigtramp_offset (pc) < 3 * ALPHA_INSN_SIZE) + if (alphaobsd_sigtramp_offset (gdbarch, pc) < 3 * ALPHA_INSN_SIZE) { /* On entry, a pointer the `struct sigcontext' is passed in %a2. */ - return frame_unwind_register_unsigned (next_frame, ALPHA_A0_REGNUM + 2); + return get_frame_register_unsigned (this_frame, ALPHA_A0_REGNUM + 2); } - else if (alphaobsd_sigtramp_offset (pc) < 4 * ALPHA_INSN_SIZE) + else if (alphaobsd_sigtramp_offset (gdbarch, pc) < 4 * ALPHA_INSN_SIZE) { /* It is stored on the stack Before calling the signal handler. */ CORE_ADDR sp; - sp = frame_unwind_register_unsigned (next_frame, ALPHA_SP_REGNUM); - return get_frame_memory_unsigned (next_frame, sp, 8); + sp = get_frame_register_unsigned (this_frame, ALPHA_SP_REGNUM); + return get_frame_memory_unsigned (this_frame, sp, 8); } else { /* It is reloaded into %a0 for the sigreturn(2) call. */ - return frame_unwind_register_unsigned (next_frame, ALPHA_A0_REGNUM); + return get_frame_register_unsigned (this_frame, ALPHA_A0_REGNUM); } }