From patchwork Thu Jul 2 22:30:56 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kevin Buettner X-Patchwork-Id: 7475 Received: (qmail 56085 invoked by alias); 2 Jul 2015 22:31:02 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 56070 invoked by uid 89); 2 Jul 2015 22:31:01 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.4 required=5.0 tests=AWL, BAYES_00, KAM_LAZY_DOMAIN_SECURITY, RP_MATCHES_RCVD, SPF_HELO_PASS, UNWANTED_LANGUAGE_BODY autolearn=no version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Thu, 02 Jul 2015 22:30:59 +0000 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id 788CD359A66 for ; Thu, 2 Jul 2015 22:30:58 +0000 (UTC) Received: from pinnacle.lan (ovpn-113-20.phx2.redhat.com [10.3.113.20]) by int-mx14.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t62MUv2b009691 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA256 bits=256 verify=NO) for ; Thu, 2 Jul 2015 18:30:58 -0400 Date: Thu, 2 Jul 2015 15:30:56 -0700 From: Kevin Buettner To: gdb-patches@sourceware.org Subject: [COMMITTED PATCH] rx: Create and use flags types for psw, bpsw, and fpsw registers. Message-ID: <20150702153056.40586fbf@pinnacle.lan> MIME-Version: 1.0 X-IsSubscribed: yes 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 + + * 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 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);