This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH]: Get dwarf2 working on sparc64 too.
- From: "David S. Miller" <davem at davemloft dot net>
- To: gdb-patches at sources dot redhat dot com
- Date: Wed, 05 Apr 2006 17:15:55 -0700 (PDT)
- Subject: [PATCH]: Get dwarf2 working on sparc64 too.
There were two problems:
1) The sparc32 registry of the dwarf2 reg_init function has
to occur before osabi init, so that osabi can override
properly.
2) We have to mark the global registers as explicitly undefined.
Besides, they are call clobbered.
This handles the case where gcc emits a DW_CFA_GNU_window_save,
which causes the gdb dwarf2 frame code to allocate a reg set out
to 32 registers, but it only sets up entries 8 --> 16. We get ugly
warnings.
And this also enables the dwarf2 frame sniffer on sparc64/Linux.
No regressions in the test suite on both sparc32/Linux and
sparc64/Linux.
Ok to apply?
2006-04-05 David S. Miller <davem@sunset.davemloft.net>
* sparc64-linux-tdep.c (sparc64_linux_init_abi): Append dwarf2
frame sniffer.
* sparc-tdep.c (sparc32_gdbarch_init): Make sure to call
dwarf2_frame_set_init_reg() before gdbarch_init_osabi() so
that the latter can override.
(sparc32_dwarf2_frame_init_reg): Mark global registers as
undefined.
* sparc64-tdep.c (sparc64_dwarf2_frame_init_reg): Likewise.
* Makefile.in (sparc64-linux-tdep.o): Update dependencies.
--- ./sparc64-linux-tdep.c.~1~ 2006-04-05 12:18:50.000000000 -0700
+++ ./sparc64-linux-tdep.c 2006-04-05 14:27:31.000000000 -0700
@@ -22,6 +22,7 @@
#include "defs.h"
#include "frame.h"
#include "frame-unwind.h"
+#include "dwarf2-frame.h"
#include "gdbarch.h"
#include "osabi.h"
#include "solib-svr4.h"
@@ -106,6 +107,9 @@ sparc64_linux_init_abi (struct gdbarch_i
tramp_frame_prepend_unwinder (gdbarch, &sparc64_linux_rt_sigframe);
+ /* Hook in the DWARF CFI frame unwinder. */
+ frame_unwind_append_sniffer (gdbarch, dwarf2_frame_sniffer);
+
sparc64_init_abi (info, gdbarch);
/* GNU/Linux has SVR4-style shared libraries... */
--- ./sparc-tdep.c.~1~ 2006-04-05 12:07:20.000000000 -0700
+++ ./sparc-tdep.c 2006-04-05 16:48:44.000000000 -0700
@@ -1029,6 +1029,15 @@ sparc32_dwarf2_frame_init_reg (struct gd
don't warn about that. */
reg->how = DWARF2_FRAME_REG_SAME_VALUE;
break;
+ case SPARC_G1_REGNUM:
+ case SPARC_G2_REGNUM:
+ case SPARC_G3_REGNUM:
+ case SPARC_G4_REGNUM:
+ case SPARC_G5_REGNUM:
+ case SPARC_G6_REGNUM:
+ case SPARC_G7_REGNUM:
+ reg->how = DWARF2_FRAME_REG_UNDEFINED;
+ break;
case SPARC_SP_REGNUM:
reg->how = DWARF2_FRAME_REG_CFA;
break;
@@ -1296,14 +1305,14 @@ sparc32_gdbarch_init (struct gdbarch_inf
frame_base_set_default (gdbarch, &sparc32_frame_base);
- /* 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. */
+ /* Hook in ABI-specific overrides, if they have been registered. */
+ gdbarch_init_osabi (info, gdbarch);
+
frame_unwind_append_sniffer (gdbarch, sparc32_frame_sniffer);
/* If we have register sets, enable the generic core file support. */
--- ./sparc64-tdep.c.~1~ 2006-04-05 11:59:49.000000000 -0700
+++ ./sparc64-tdep.c 2006-04-05 16:48:18.000000000 -0700
@@ -1117,6 +1117,15 @@ sparc64_dwarf2_frame_init_reg (struct gd
don't warn about that. */
reg->how = DWARF2_FRAME_REG_SAME_VALUE;
break;
+ case SPARC_G1_REGNUM:
+ case SPARC_G2_REGNUM:
+ case SPARC_G3_REGNUM:
+ case SPARC_G4_REGNUM:
+ case SPARC_G5_REGNUM:
+ case SPARC_G6_REGNUM:
+ case SPARC_G7_REGNUM:
+ reg->how = DWARF2_FRAME_REG_UNDEFINED;
+ break;
case SPARC_SP_REGNUM:
reg->how = DWARF2_FRAME_REG_CFA;
break;
--- ./Makefile.in.~1~ 2006-04-05 15:55:07.000000000 -0700
+++ ./Makefile.in 2006-04-05 16:50:56.000000000 -0700
@@ -2616,8 +2616,9 @@ sparc64-linux-nat.o: sparc64-linux-nat.c
$(gregset_h) $(sparc64_tdep_h) $(sparc_tdep_h) \
$(sparc_nat_h) $(inferior_h) $(target_h) $(linux_nat_h)
sparc64-linux-tdep.o: sparc64-linux-tdep.c $(defs_h) $(frame_h) \
- $(frame_unwind_h) $(gdbarch_h) $(osabi_h) $(solib_svr4_h) \
- $(symtab_h) $(trad_frame_h) $(tramp_frame_h) $(sparc64_tdep_h)
+ $(frame_unwind_h) $(dwarf2_frame_h) $(gdbarch_h) $(osabi_h) \
+ $(solib_svr4_h) $(symtab_h) $(trad_frame_h) $(tramp_frame_h) \
+ $(sparc64_tdep_h)
sparc64-nat.o: sparc64-nat.c $(defs_h) $(gdbarch_h) $(sparc64_tdep_h) \
$(sparc_nat_h)
sparc64nbsd-nat.o: sparc64nbsd-nat.c $(defs_h) $(regcache_h) $(target_h) \