summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/rl78-tdep.c36
-rw-r--r--gdb/testsuite/gdb.base/all-architectures.exp.in6
2 files changed, 25 insertions, 17 deletions
diff --git a/gdb/rl78-tdep.c b/gdb/rl78-tdep.c
index 95a26a5124a..0e88fbc037a 100644
--- a/gdb/rl78-tdep.c
+++ b/gdb/rl78-tdep.c
@@ -261,6 +261,30 @@ struct rl78_prologue
int reg_offset[RL78_NUM_TOTAL_REGS];
};
+/* Construct type for PSW register. */
+
+static struct type *
+rl78_psw_type (struct gdbarch *gdbarch)
+{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+
+ if (tdep->rl78_psw_type == NULL)
+ {
+ tdep->rl78_psw_type = arch_flags_type (gdbarch,
+ "builtin_type_rl78_psw", 1);
+ append_flags_type_flag (tdep->rl78_psw_type, 0, "CY");
+ append_flags_type_flag (tdep->rl78_psw_type, 1, "ISP0");
+ append_flags_type_flag (tdep->rl78_psw_type, 2, "ISP1");
+ append_flags_type_flag (tdep->rl78_psw_type, 3, "RBS0");
+ append_flags_type_flag (tdep->rl78_psw_type, 4, "AC");
+ append_flags_type_flag (tdep->rl78_psw_type, 5, "RBS1");
+ append_flags_type_flag (tdep->rl78_psw_type, 6, "Z");
+ append_flags_type_flag (tdep->rl78_psw_type, 7, "IE");
+ }
+
+ return tdep->rl78_psw_type;
+}
+
/* Implement the "register_type" gdbarch method. */
static struct type *
@@ -273,7 +297,7 @@ rl78_register_type (struct gdbarch *gdbarch, int reg_nr)
else if (reg_nr == RL78_RAW_PC_REGNUM)
return tdep->rl78_uint32;
else if (reg_nr == RL78_PSW_REGNUM)
- return (tdep->rl78_psw_type);
+ return rl78_psw_type (gdbarch);
else if (reg_nr <= RL78_MEM_REGNUM
|| (RL78_X_REGNUM <= reg_nr && reg_nr <= RL78_H_REGNUM)
|| (RL78_BANK0_R0_REGNUM <= reg_nr
@@ -1406,16 +1430,6 @@ rl78_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
tdep->rl78_code_pointer
= arch_pointer_type (gdbarch, 32, "rl78_code_addr_t", tdep->rl78_void);
- tdep->rl78_psw_type = arch_flags_type (gdbarch, "builtin_type_rl78_psw", 1);
- append_flags_type_flag (tdep->rl78_psw_type, 0, "CY");
- append_flags_type_flag (tdep->rl78_psw_type, 1, "ISP0");
- append_flags_type_flag (tdep->rl78_psw_type, 2, "ISP1");
- append_flags_type_flag (tdep->rl78_psw_type, 3, "RBS0");
- append_flags_type_flag (tdep->rl78_psw_type, 4, "AC");
- append_flags_type_flag (tdep->rl78_psw_type, 5, "RBS1");
- append_flags_type_flag (tdep->rl78_psw_type, 6, "Z");
- append_flags_type_flag (tdep->rl78_psw_type, 7, "IE");
-
/* Registers. */
set_gdbarch_num_regs (gdbarch, RL78_NUM_REGS);
set_gdbarch_num_pseudo_regs (gdbarch, RL78_NUM_PSEUDO_REGS);
diff --git a/gdb/testsuite/gdb.base/all-architectures.exp.in b/gdb/testsuite/gdb.base/all-architectures.exp.in
index 4a8099ca45c..94bee2e0c8e 100644
--- a/gdb/testsuite/gdb.base/all-architectures.exp.in
+++ b/gdb/testsuite/gdb.base/all-architectures.exp.in
@@ -209,12 +209,6 @@ with_test_prefix "tests" {
continue
}
- if {$arch == "rl78"} {
- if {$want_tests_messages} {
- kfail "set architecture rl78" "gdb/20953"
- }
- continue
- }
if {$arch == "rx"} {
if {$want_tests_messages} {
kfail "set architecture rx" "gdb/20954"