X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Falphaobsd-tdep.c;h=5c2a8b0d55ab0386741d9c8e9acb75d0d762eeb6;hb=40c1a0073715c1e3f93afc83edac8396eb362a98;hp=ad0360e6076dc709bb324eea086c7482de80a9b0;hpb=8a112c90fe342a045c82485eb3b1ef65f7c735f3;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/alphaobsd-tdep.c b/gdb/alphaobsd-tdep.c index ad0360e607..5c2a8b0d55 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-2014 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,15 +15,14 @@ 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" #include "gdbcore.h" #include "osabi.h" +#include "obsd-tdep.h" #include "alpha-tdep.h" #include "alphabsd-tdep.h" #include "solib-svr4.h" @@ -41,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, const char *name) { CORE_ADDR start_pc = (pc & ~(alphaobsd_page_size - 1)); unsigned insn; @@ -56,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; @@ -69,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); } } @@ -111,6 +112,7 @@ alphaobsd_init_abi(struct gdbarch_info info, struct gdbarch *gdbarch) /* OpenBSD/alpha has SVR4-style shared libraries. */ set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_lp64_fetch_link_map_offsets); + set_gdbarch_skip_solib_resolver (gdbarch, obsd_skip_solib_resolver); tdep->dynamic_sigtramp_offset = alphaobsd_sigtramp_offset; tdep->pc_in_sigtramp = alphaobsd_pc_in_sigtramp;