X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fhppabsd-tdep.c;h=a6feefbff46c0ceb13eac966033f85b3baf46848;hb=35fd2deb6916e972248d52b1bc1d584fa9059f8f;hp=2a834abb486e1d54753bd93c60863f19aafd65f8;hpb=7b6bb8daaceb9ecf3f42dea57ae82733d6a3b2f6;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/hppabsd-tdep.c b/gdb/hppabsd-tdep.c index 2a834abb48..a6feefbff4 100644 --- a/gdb/hppabsd-tdep.c +++ b/gdb/hppabsd-tdep.c @@ -1,7 +1,6 @@ /* Target-dependent code for HP PA-RISC BSD's. - Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 - Free Software Foundation, Inc. + Copyright (C) 2004-2016 Free Software Foundation, Inc. This file is part of GDB. @@ -27,6 +26,7 @@ #include "hppa-tdep.h" #include "hppabsd-tdep.h" +#include "dwarf2-frame.h" #include "solib-svr4.h" static CORE_ADDR @@ -48,7 +48,7 @@ hppabsd_find_global_pointer (struct gdbarch *gdbarch, struct value *function) /* If the address is in the .plt section, then the real function hasn't yet been fixed up by the linker so we cannot determine the Global Pointer for that function. */ - if (in_plt_section (faddr, NULL)) + if (in_plt_section (faddr)) return 0; faddr_sec = find_pc_section (faddr); @@ -105,6 +105,17 @@ hppabsd_find_global_pointer (struct gdbarch *gdbarch, struct value *function) } +static void +hppabsd_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum, + struct dwarf2_frame_state_reg *reg, + struct frame_info *this_frame) +{ + if (regnum == HPPA_PCOQ_HEAD_REGNUM) + reg->how = DWARF2_FRAME_REG_RA; + else if (regnum == HPPA_SP_REGNUM) + reg->how = DWARF2_FRAME_REG_CFA; +} + void hppabsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) { @@ -123,4 +134,8 @@ hppabsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) /* OpenBSD and NetBSD use SVR4-style shared libraries. */ set_solib_svr4_fetch_link_map_offsets (gdbarch, svr4_ilp32_fetch_link_map_offsets); + + /* Hook in the DWARF CFI frame unwinder. */ + dwarf2_frame_set_init_reg (gdbarch, hppabsd_dwarf2_frame_init_reg); + dwarf2_append_unwinders (gdbarch); }