diff options
author | David S. Miller <davem@redhat.com> | 2006-04-05 18:35:39 +0000 |
---|---|---|
committer | David S. Miller <davem@redhat.com> | 2006-04-05 18:35:39 +0000 |
commit | f5a9b87dbecc6b4d557e339603b39a6d34cd5ea4 (patch) | |
tree | 181a16f8e53a80ae46708f5d02a7975732b4356c /gdb/sparc-tdep.c | |
parent | c5f8c3881a54348a45b3bb27fd3251e00177859b (diff) | |
download | gdb-f5a9b87dbecc6b4d557e339603b39a6d34cd5ea4.zip gdb-f5a9b87dbecc6b4d557e339603b39a6d34cd5ea4.tar.gz gdb-f5a9b87dbecc6b4d557e339603b39a6d34cd5ea4.tar.bz2 |
* sparc-tdep.c (sparc32_dwarf2_frame_init_reg): New.
(sparc32_gdbarch_init): Pass it to dwarf2_frame_set_init_reg.
* Makefile.in (sparc-tdep.o): Update dependencies.
Diffstat (limited to 'gdb/sparc-tdep.c')
-rw-r--r-- | gdb/sparc-tdep.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/gdb/sparc-tdep.c b/gdb/sparc-tdep.c index dc6c534..728ebad 100644 --- a/gdb/sparc-tdep.c +++ b/gdb/sparc-tdep.c @@ -22,6 +22,7 @@ #include "defs.h" #include "arch-utils.h" #include "dis-asm.h" +#include "dwarf2-frame.h" #include "floatformat.h" #include "frame.h" #include "frame-base.h" @@ -994,6 +995,32 @@ sparc32_stabs_argument_has_addr (struct gdbarch *gdbarch, struct type *type) || (sparc_floating_p (type) && TYPE_LENGTH (type) == 16)); } +static void +sparc32_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum, + struct dwarf2_frame_state_reg *reg) +{ + switch (regnum) + { + case SPARC_G0_REGNUM: + /* Since %g0 is always zero, there is no point in saving it, and + people will be inclined omit it from the CFI. Make sure we + don't warn about that. */ + reg->how = DWARF2_FRAME_REG_SAME_VALUE; + break; + case SPARC_SP_REGNUM: + reg->how = DWARF2_FRAME_REG_CFA; + break; + case SPARC32_PC_REGNUM: + reg->how = DWARF2_FRAME_REG_RA_OFFSET; + reg->loc.offset = 8; + break; + case SPARC32_NPC_REGNUM: + reg->how = DWARF2_FRAME_REG_RA_OFFSET; + reg->loc.offset = 12; + break; + } +} + /* The SPARC Architecture doesn't have hardware single-step support, and most operating systems don't implement it either, so we provide @@ -1248,6 +1275,11 @@ sparc32_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) /* Hook in ABI-specific overrides, if they have been registered. */ gdbarch_init_osabi (info, gdbarch); + /* Hook in the DWARF CFI frame unwinder. */ + dwarf2_frame_set_init_reg (gdbarch, sparc32_dwarf2_frame_init_reg); + /* FIXME: kettenis/20050423: Don't enable the unwinder until the + StackGhost issues have been resolved. */ + frame_unwind_append_sniffer (gdbarch, sparc32_frame_sniffer); /* If we have register sets, enable the generic core file support. */ |