From: Kevin Buettner <kevinb@redhat.com>
To: gdb-patches@sourceware.org
Subject: [COMMITTED PATCH] rx: Create and use flags types for psw, bpsw, and fpsw registers.
Date: Thu, 02 Jul 2015 22:31:00 -0000 [thread overview]
Message-ID: <20150702153056.40586fbf@pinnacle.lan> (raw)
This change adds two flags types for the (Renesas RX) psw, bpsw, and
fpsw registers. As a result, symbolic flags are displayed for these
registers in the output of GDB's "info registers" command as well as
in output from other commands, such as "print".
gdb/ChangeLog:
* rx-tdep.c (RX_BPSW_REGNUM, RX_FPSW_REGNUM): New constants.
(struct gdbarch_tdep): Add fields rx_psw_type and rx_fpsw_type.
(rx_register_type): Add cases for RX_PSW_REGNUM, RX_BPSW_REGNUM,
and RX_FPSW_REGNUM.
(rx_gdbarch_init): Initialize PSW, BPSW, and FPSW flags types.
---
gdb/ChangeLog | 8 ++++++++
gdb/rx-tdep.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 61 insertions(+)
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 9dc21e8..1dbae20 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,11 @@
+2015-07-02 Kevin Buettner <kevinb@redhat.com>
+
+ * rx-tdep.c (RX_BPSW_REGNUM, RX_FPSW_REGNUM): New constants.
+ (struct gdbarch_tdep): Add fields rx_psw_type and rx_fpsw_type.
+ (rx_register_type): Add cases for RX_PSW_REGNUM, RX_BPSW_REGNUM,
+ and RX_FPSW_REGNUM.
+ (rx_gdbarch_init): Initialize PSW, BPSW, and FPSW flags types.
+
2015-07-02 Jan Kratochvil <jan.kratochvil@redhat.com>
Fix GCC false warning.
diff --git a/gdb/rx-tdep.c b/gdb/rx-tdep.c
index 11d390b..15c4cde 100644
--- a/gdb/rx-tdep.c
+++ b/gdb/rx-tdep.c
@@ -47,6 +47,8 @@ enum
RX_R15_REGNUM = 15,
RX_PSW_REGNUM = 18,
RX_PC_REGNUM = 19,
+ RX_BPSW_REGNUM = 21,
+ RX_FPSW_REGNUM = 24,
RX_ACC_REGNUM = 25,
RX_NUM_REGS = 26
};
@@ -56,6 +58,12 @@ struct gdbarch_tdep
{
/* The ELF header flags specify the multilib used. */
int elf_flags;
+
+ /* Type of PSW and BPSW. */
+ struct type *rx_psw_type;
+
+ /* Type of FPSW. */
+ struct type *rx_fpsw_type;
};
/* This structure holds the results of a prologue analysis. */
@@ -132,8 +140,14 @@ rx_register_name (struct gdbarch *gdbarch, int regnr)
static struct type *
rx_register_type (struct gdbarch *gdbarch, int reg_nr)
{
+ struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+
if (reg_nr == RX_PC_REGNUM)
return builtin_type (gdbarch)->builtin_func_ptr;
+ else if (reg_nr == RX_PSW_REGNUM || reg_nr == RX_BPSW_REGNUM)
+ return tdep->rx_psw_type;
+ else if (reg_nr == RX_FPSW_REGNUM)
+ return tdep->rx_fpsw_type;
else if (reg_nr == RX_ACC_REGNUM)
return builtin_type (gdbarch)->builtin_unsigned_long_long;
else
@@ -816,6 +830,45 @@ rx_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
gdbarch = gdbarch_alloc (&info, tdep);
tdep->elf_flags = elf_flags;
+ /* Initialize the flags type for PSW and BPSW. */
+
+ tdep->rx_psw_type = arch_flags_type (gdbarch, "rx_psw_type", 4);
+ append_flags_type_flag (tdep->rx_psw_type, 0, "C");
+ append_flags_type_flag (tdep->rx_psw_type, 1, "Z");
+ append_flags_type_flag (tdep->rx_psw_type, 2, "S");
+ append_flags_type_flag (tdep->rx_psw_type, 3, "O");
+ append_flags_type_flag (tdep->rx_psw_type, 16, "I");
+ append_flags_type_flag (tdep->rx_psw_type, 17, "U");
+ append_flags_type_flag (tdep->rx_psw_type, 20, "PM");
+ append_flags_type_flag (tdep->rx_psw_type, 24, "IPL0");
+ append_flags_type_flag (tdep->rx_psw_type, 25, "IPL1");
+ append_flags_type_flag (tdep->rx_psw_type, 26, "IPL2");
+ append_flags_type_flag (tdep->rx_psw_type, 27, "IPL3");
+
+ /* Initialize flags type for FPSW. */
+
+ tdep->rx_fpsw_type = arch_flags_type (gdbarch, "rx_fpsw_type", 4);
+ append_flags_type_flag (tdep->rx_fpsw_type, 0, "RM0");
+ append_flags_type_flag (tdep->rx_fpsw_type, 1, "RM1");
+ append_flags_type_flag (tdep->rx_fpsw_type, 2, "CV");
+ append_flags_type_flag (tdep->rx_fpsw_type, 3, "CO");
+ append_flags_type_flag (tdep->rx_fpsw_type, 4, "CZ");
+ append_flags_type_flag (tdep->rx_fpsw_type, 5, "CU");
+ append_flags_type_flag (tdep->rx_fpsw_type, 6, "CX");
+ append_flags_type_flag (tdep->rx_fpsw_type, 7, "CE");
+ append_flags_type_flag (tdep->rx_fpsw_type, 8, "DN");
+ append_flags_type_flag (tdep->rx_fpsw_type, 10, "EV");
+ append_flags_type_flag (tdep->rx_fpsw_type, 11, "EO");
+ append_flags_type_flag (tdep->rx_fpsw_type, 12, "EZ");
+ append_flags_type_flag (tdep->rx_fpsw_type, 13, "EU");
+ append_flags_type_flag (tdep->rx_fpsw_type, 14, "EX");
+ append_flags_type_flag (tdep->rx_fpsw_type, 26, "FV");
+ append_flags_type_flag (tdep->rx_fpsw_type, 27, "FO");
+ append_flags_type_flag (tdep->rx_fpsw_type, 28, "FZ");
+ append_flags_type_flag (tdep->rx_fpsw_type, 29, "FU");
+ append_flags_type_flag (tdep->rx_fpsw_type, 30, "FX");
+ append_flags_type_flag (tdep->rx_fpsw_type, 31, "FS");
+
set_gdbarch_num_regs (gdbarch, RX_NUM_REGS);
set_gdbarch_num_pseudo_regs (gdbarch, 0);
set_gdbarch_register_name (gdbarch, rx_register_name);
reply other threads:[~2015-07-02 22:31 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=20150702153056.40586fbf@pinnacle.lan \
--to=kevinb@redhat.com \
--cc=gdb-patches@sourceware.org \
/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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).