Index: gdb/hppabsd-tdep.c |
diff --git a/gdb/hppabsd-tdep.c b/gdb/hppabsd-tdep.c |
index 5605abbc4a12c17d6e7f2399e20a9d8822306a97..9b2a219ce929c56f955e4eea351c3e6b29c0c44c 100644 |
--- a/gdb/hppabsd-tdep.c |
+++ b/gdb/hppabsd-tdep.c |
@@ -1,6 +1,6 @@ |
/* Target-dependent code for HP PA-RISC BSD's. |
- Copyright (C) 2004-2012 Free Software Foundation, Inc. |
+ Copyright (C) 2004-2013 Free Software Foundation, Inc. |
This file is part of GDB. |
@@ -26,6 +26,7 @@ |
#include "hppa-tdep.h" |
#include "hppabsd-tdep.h" |
+#include "dwarf2-frame.h" |
#include "solib-svr4.h" |
static CORE_ADDR |
@@ -47,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); |
@@ -104,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) |
{ |
@@ -122,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); |
} |