From patchwork Thu Feb 16 11:20:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hui Li X-Patchwork-Id: 65104 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id B1BD038493C8 for ; Thu, 16 Feb 2023 11:20:39 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from loongson.cn (mail.loongson.cn [114.242.206.163]) by sourceware.org (Postfix) with ESMTP id 4866A3858C60 for ; Thu, 16 Feb 2023 11:20:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 4866A3858C60 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=loongson.cn Received: from loongson.cn (unknown [113.200.148.30]) by gateway (Coremail) with SMTP id _____8Cx75d1Ee5j8k4BAA--.2225S3; Thu, 16 Feb 2023 19:20:21 +0800 (CST) Received: from localhost.localdomain (unknown [113.200.148.30]) by localhost.localdomain (Coremail) with SMTP id AQAAf8Bxb+R0Ee5jD400AA--.62042S3; Thu, 16 Feb 2023 19:20:20 +0800 (CST) From: Hui Li To: gdb-patches@sourceware.org Cc: Hui Li Subject: [PATCH 1/2] gdb: LoongArch: Modify the result of the info reg command Date: Thu, 16 Feb 2023 19:20:19 +0800 Message-Id: <20230216112020.25610-2-lihui@loongson.cn> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20230216112020.25610-1-lihui@loongson.cn> References: <20230216112020.25610-1-lihui@loongson.cn> MIME-Version: 1.0 X-CM-TRANSID: AQAAf8Bxb+R0Ee5jD400AA--.62042S3 X-CM-SenderInfo: 5olk3xo6or00hjvr0hdfq/ X-Coremail-Antispam: 1Uk129KBjvJXoW7ur48Aw4UXFyxuryrur4fGrg_yoW8KrW7pa 1kCw15Jr18JrsrAFZxA34YvF1fZw1fGr1fZFyxWr1xArsrGw1rWw4ftFy5ZF15J3Wqgw4j gFsYywnxuF4UC3DanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUj1kv1TuYvTs0mT0YCTnIWj qI5I8CrVACY4xI64kE6c02F40Ex7xfYxn0WfASr-VFAUDa7-sFnT9fnUUIcSsGvfJTRUUU b7xYFVCjjxCrM7AC8VAFwI0_Jr0_Gr1l1xkIjI8I6I8E6xAIw20EY4v20xvaj40_Wr0E3s 1l1IIY67AEw4v_JrI_Jryl8cAvFVAK0II2c7xJM28CjxkF64kEwVA0rcxSw2x7M28EF7xv wVC0I7IYx2IY67AKxVW8JVW5JwA2z4x0Y4vE2Ix0cI8IcVCY1x0267AKxVW8JVWxJwA2z4 x0Y4vEx4A2jsIE14v26F4UJVW0owA2z4x0Y4vEx4A2jsIEc7CjxVAFwI0_Cr1j6rxdM2AI xVAIcxkEcVAq07x20xvEncxIr21l57IF6xkI12xvs2x26I8E6xACxx1l5I8CrVACY4xI64 kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r1j6r18McIj6I8E87Iv67AKxVW8JVWxJwAm 72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IYc2Ij64vIr41l42xK82IYc2Ij64vIr41l4I8I3I 0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxVAqx4xG67AKxVWUJVWUGwC20s026x8GjcxK67AKxVWU GVWUWwC2zVAF1VAY17CE14v26r1Y6r17MIIYrxkI7VAKI48JMIIF0xvE2Ix0cI8IcVAFwI 0_Jr0_JF4lIxAIcVC0I7IYx2IY6xkF7I0E14v26r1j6r4UMIIF0xvE42xK8VAvwI8IcIk0 rVWUJVWUCwCI42IY6I8E87Iv67AKxVWUJVW8JwCI42IY6I8E87Iv6xkF7I0E14v26r1j6r 4UYxBIdaVFxhVjvjDU0xZFpf9x07jOF4_UUUUU= X-Spam-Status: No, score=-10.0 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Sender: "Gdb-patches" The "info register" command should only display general registers, but it shows the information of all registers in the current code, add loongarch_register_reggroup_p() so that we can get the expected result. Signed-off-by: Hui Li --- gdb/loongarch-tdep.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/gdb/loongarch-tdep.c b/gdb/loongarch-tdep.c index 5f7a8a00ce7..67ea5494d90 100644 --- a/gdb/loongarch-tdep.c +++ b/gdb/loongarch-tdep.c @@ -24,6 +24,7 @@ #include "frame-unwind.h" #include "gdbcore.h" #include "loongarch-tdep.h" +#include "reggroups.h" #include "target.h" #include "target-descriptions.h" #include "trad-frame.h" @@ -1433,6 +1434,43 @@ loongarch_find_default_target_description (const struct gdbarch_info info) return loongarch_lookup_target_description (features); } +static int +loongarch_register_reggroup_p (struct gdbarch *gdbarch, int regnum, + const struct reggroup *group) +{ + if (gdbarch_register_name (gdbarch, regnum) == NULL + || *gdbarch_register_name (gdbarch, regnum) == '\0') + return 0; + + int raw_p = regnum < gdbarch_num_regs (gdbarch); + + if (group == save_reggroup || group == restore_reggroup) + return raw_p; + + if (group == all_reggroup) + return 1; + + if (0 <= regnum && regnum <= LOONGARCH_BADV_REGNUM) + return group == general_reggroup; + + /* Only ORIG_A0, PC, BADV in general_reggroup */ + if (group == general_reggroup) + return 0; + + if (LOONGARCH_FIRST_FP_REGNUM <= regnum && regnum <= LOONGARCH_FCSR_REGNUM) + return group == float_reggroup; + + /* Only $fx / $fccx / $fcsr in float_reggroup */ + if (group == float_reggroup) + return 0; + + int ret = tdesc_register_in_reggroup_p (gdbarch, regnum, group); + if (ret != -1) + return ret; + + return default_register_reggroup_p (gdbarch, regnum, group); +} + /* Initialize the current architecture based on INFO */ static struct gdbarch * @@ -1586,6 +1624,7 @@ loongarch_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) /* Hook in OS ABI-specific overrides, if they have been registered. */ gdbarch_init_osabi (info, gdbarch); + set_gdbarch_register_reggroup_p (gdbarch, loongarch_register_reggroup_p); return gdbarch; } From patchwork Thu Feb 16 11:20:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hui Li X-Patchwork-Id: 65105 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id CAED2384F031 for ; Thu, 16 Feb 2023 11:20:50 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from loongson.cn (mail.loongson.cn [114.242.206.163]) by sourceware.org (Postfix) with ESMTP id 047FD3858C78 for ; Thu, 16 Feb 2023 11:20:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 047FD3858C78 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=loongson.cn Received: from loongson.cn (unknown [113.200.148.30]) by gateway (Coremail) with SMTP id _____8AxJ_B1Ee5j804BAA--.3459S3; Thu, 16 Feb 2023 19:20:21 +0800 (CST) Received: from localhost.localdomain (unknown [113.200.148.30]) by localhost.localdomain (Coremail) with SMTP id AQAAf8Bxb+R0Ee5jD400AA--.62042S4; Thu, 16 Feb 2023 19:20:21 +0800 (CST) From: Hui Li To: gdb-patches@sourceware.org Cc: Hui Li Subject: [PATCH 2/2] gdb: LoongArch: Support reg aliases in info reg command Date: Thu, 16 Feb 2023 19:20:20 +0800 Message-Id: <20230216112020.25610-3-lihui@loongson.cn> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20230216112020.25610-1-lihui@loongson.cn> References: <20230216112020.25610-1-lihui@loongson.cn> MIME-Version: 1.0 X-CM-TRANSID: AQAAf8Bxb+R0Ee5jD400AA--.62042S4 X-CM-SenderInfo: 5olk3xo6or00hjvr0hdfq/ X-Coremail-Antispam: 1Uk129KBjvJXoW7KryDAw15WryxKr1UtF1UKFg_yoW8CrWkpF W3uwn3tFy8GrnrArsxt3yYvFZYvrZ7Gry2vFsIy3WfAFsrJ3yI9rs5K34qqF4UGw18KrWj gF4kt3W3uF4UA3DanT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUj1kv1TuYvTs0mT0YCTnIWj qI5I8CrVACY4xI64kE6c02F40Ex7xfYxn0WfASr-VFAUDa7-sFnT9fnUUIcSsGvfJTRUUU b7xYFVCjjxCrM7AC8VAFwI0_Jr0_Gr1l1xkIjI8I6I8E6xAIw20EY4v20xvaj40_Wr0E3s 1l1IIY67AEw4v_JrI_Jryl8cAvFVAK0II2c7xJM28CjxkF64kEwVA0rcxSw2x7M28EF7xv wVC0I7IYx2IY67AKxVW5JVW7JwA2z4x0Y4vE2Ix0cI8IcVCY1x0267AKxVW8JVWxJwA2z4 x0Y4vEx4A2jsIE14v26F4UJVW0owA2z4x0Y4vEx4A2jsIEc7CjxVAFwI0_Cr1j6rxdM2AI xVAIcxkEcVAq07x20xvEncxIr21l57IF6xkI12xvs2x26I8E6xACxx1l5I8CrVACY4xI64 kE6c02F40Ex7xfMcIj6xIIjxv20xvE14v26r106r15McIj6I8E87Iv67AKxVW8JVWxJwAm 72CE4IkC6x0Yz7v_Jr0_Gr1lF7xvr2IYc2Ij64vIr41l42xK82IYc2Ij64vIr41l4I8I3I 0E4IkC6x0Yz7v_Jr0_Gr1lx2IqxVAqx4xG67AKxVWUJVWUGwC20s026x8GjcxK67AKxVWU GVWUWwC2zVAF1VAY17CE14v26r1Y6r17MIIYrxkI7VAKI48JMIIF0xvE2Ix0cI8IcVAFwI 0_Jr0_JF4lIxAIcVC0I7IYx2IY6xkF7I0E14v26r1j6r4UMIIF0xvE42xK8VAvwI8IcIk0 rVWUJVWUCwCI42IY6I8E87Iv67AKxVWUJVW8JwCI42IY6I8E87Iv6xkF7I0E14v26r1j6r 4UYxBIdaVFxhVjvjDU0xZFpf9x07j0sjUUUUUU= X-Spam-Status: No, score=-10.4 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Sender: "Gdb-patches" According to LoongArch ELF ABI specification [1], support the register aliases in "info register" command. Without this patch: ``` (gdb) info reg a0 Invalid register `a0' ``` With this patch: ``` (gdb) info reg a0 a0 0x1 1 ``` [1] https://loongson.github.io/LoongArch-Documentation/LoongArch-ELF-ABI-EN.html#_register_convention Signed-off-by: Hui Li --- gdb/loongarch-tdep.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/gdb/loongarch-tdep.c b/gdb/loongarch-tdep.c index 67ea5494d90..f5ddad0ba65 100644 --- a/gdb/loongarch-tdep.c +++ b/gdb/loongarch-tdep.c @@ -387,6 +387,14 @@ loongarch_software_single_step (struct regcache *regcache) return {next_pc}; } +/* Callback function for user_reg_add. */ + +static struct value * +value_of_loongarch_user_reg (frame_info_ptr frame, const void *baton) +{ + return value_of_register ((long long) baton, frame); +} + /* Implement the frame_align gdbarch method. */ static CORE_ADDR @@ -1589,6 +1597,19 @@ loongarch_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) info.target_desc = tdesc; info.tdesc_data = tdesc_data.get (); + for (int i = 0; i < ARRAY_SIZE (loongarch_r_lp64_name); ++i) + if (loongarch_r_lp64_name[i][0] != '\0') + user_reg_add (gdbarch, loongarch_r_lp64_name[i] + 1, + value_of_loongarch_user_reg, (void *) (size_t) i); + + for (int i = 0; i < ARRAY_SIZE (loongarch_f_lp64_name); ++i) + { + if (loongarch_f_lp64_name[i][0] != '\0') + user_reg_add (gdbarch, loongarch_f_lp64_name[i] + 1, + value_of_loongarch_user_reg, + (void *) (size_t) (LOONGARCH_FIRST_FP_REGNUM + i)); + } + /* Information about registers. */ set_gdbarch_num_regs (gdbarch, regnum); set_gdbarch_sp_regnum (gdbarch, LOONGARCH_SP_REGNUM);