summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Buettner <kevinb@redhat.com>2015-06-29 08:08:12 -0700
committerKevin Buettner <kevinb@redhat.com>2015-06-29 17:50:43 -0700
commitfd6e021d8c989905bbb234fdf993799db5a18cb9 (patch)
treebf3b8f55b492e07ebe4b93c75e869d630f775c7b
parent56b06706ebe6bb3decc674b788b6f5b243b8610d (diff)
downloadbinutils-gdb-fd6e021d8c989905bbb234fdf993799db5a18cb9.tar.gz
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.
-rw-r--r--gdb/ChangeLog7
-rw-r--r--gdb/rx-tdep.c25
2 files changed, 28 insertions, 4 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index a8aa0baa9c4..74a88dbc895 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 aa44f7adc54..11d390b47c1 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.