This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[COMMITTED PATCH] Turn on dwarf2 unwinding for Renesas RX architecture


This change turns on dwarf2 unwinding in rx-tdep.c.  I found it
necessary to add rx_dwarf_reg_to_regnum in order to cause PC to be
mapped correctly.

gdb/ChangeLog:

    * rx-tdep.c (RX_PSW_REGNUM): New enum constant.
    (rx_dwarf_reg_to_regnum): New function.
    (rx_gdbarch_init): Register rx_dwarf_reg_to_regnum.  Use dwarf2
    unwinding.
---
 gdb/ChangeLog |  7 +++++++
 gdb/rx-tdep.c | 25 +++++++++++++++++++++----
 2 files changed, 28 insertions(+), 4 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index a8aa0ba..74a88db 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,10 @@
+2015-06-29  Kevin Buettner  <kevinb@redhat.com>
+
+        * rx-tdep.c (RX_PSW_REGNUM): New enum constant.
+        (rx_dwarf_reg_to_regnum): New function.
+        (rx_gdbarch_init): Register rx_dwarf_reg_to_regnum.  Use dwarf2
+        unwinding.
+
 2015-06-29  Pedro Alves  <palves@redhat.com>
 
 	PR threads/18127
diff --git a/gdb/rx-tdep.c b/gdb/rx-tdep.c
index aa44f7a..11d390b 100644
--- a/gdb/rx-tdep.c
+++ b/gdb/rx-tdep.c
@@ -45,6 +45,7 @@ enum
   RX_R4_REGNUM = 4,
   RX_FP_REGNUM = 6,
   RX_R15_REGNUM = 15,
+  RX_PSW_REGNUM = 18,
   RX_PC_REGNUM = 19,
   RX_ACC_REGNUM = 25,
   RX_NUM_REGS = 26
@@ -764,6 +765,23 @@ rx_breakpoint_from_pc (struct gdbarch *gdbarch, CORE_ADDR *pcptr, int *lenptr)
   return breakpoint;
 }
 
+/* Implement the dwarf_reg_to_regnum" gdbarch method.  */
+
+static int
+rx_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
+{
+  if (0 <= reg && reg <= 15)
+    return reg;
+  else if (reg == 16)
+    return RX_PSW_REGNUM;
+  else if (reg == 17)
+    return RX_PC_REGNUM;
+  else
+    internal_error (__FILE__, __LINE__,
+                    _("Undefined dwarf2 register mapping of reg %d"),
+		    reg);
+}
+
 /* Allocate and initialize a gdbarch object.  */
 static struct gdbarch *
 rx_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
@@ -838,12 +856,11 @@ rx_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
       set_gdbarch_long_double_format (gdbarch, floatformats_ieee_single);
     }
 
+  /* DWARF register mapping.  */
+  set_gdbarch_dwarf2_reg_to_regnum (gdbarch, rx_dwarf_reg_to_regnum);
+
   /* Frame unwinding.  */
-#if 0
-  /* Note: The test results are better with the dwarf2 unwinder disabled,
-     so it's turned off for now.  */
   dwarf2_append_unwinders (gdbarch);
-#endif
   frame_unwind_append_unwinder (gdbarch, &rx_frame_unwind);
 
   /* Methods for saving / extracting a dummy frame's ID.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]