From: "David S. Miller" <davem@davemloft.net>
To: gdb-patches@sources.redhat.com
Subject: [PATCH]: Get dwarf2 working on sparc64 too.
Date: Thu, 06 Apr 2006 00:16:00 -0000 [thread overview]
Message-ID: <20060405.171555.27430870.davem@davemloft.net> (raw)
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) \
next reply other threads:[~2006-04-06 0:16 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-04-06 0:16 David S. Miller [this message]
2006-04-08 21:01 ` Mark Kettenis
2006-04-08 22:16 ` David S. Miller
2006-04-08 23:03 ` David S. Miller
2006-04-09 7:17 ` Mark Kettenis
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20060405.171555.27430870.davem@davemloft.net \
--to=davem@davemloft.net \
--cc=gdb-patches@sources.redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox