From 3eba483364436567fd1b6ac4b5d82e23bb223a54 Mon Sep 17 00:00:00 2001 From: Youling Tang Date: Sun, 10 Jul 2022 10:22:33 +0800 Subject: [PATCH] gdbserver: LoongArch: Simplify code with register number macros Move "enum loongarch_regnum" to gdb/arch/loongarch.h so that the macro definitions can be used in gdbserver/linux-loongarch-low.cc to simplify the code. Signed-off-by: Youling Tang Signed-off-by: Tiezhu Yang --- gdb/arch/loongarch.h | 16 ++++++++++++++++ gdb/loongarch-tdep.h | 16 ---------------- gdbserver/linux-loongarch-low.cc | 24 +++++++++--------------- 3 files changed, 25 insertions(+), 31 deletions(-) diff --git a/gdb/arch/loongarch.h b/gdb/arch/loongarch.h index 8194ea66c0a..5cf5498079a 100644 --- a/gdb/arch/loongarch.h +++ b/gdb/arch/loongarch.h @@ -22,6 +22,22 @@ #include "gdbsupport/tdesc.h" +/* Register numbers of various important registers. */ +enum +{ + LOONGARCH_RA_REGNUM = 1, /* Return Address. */ + LOONGARCH_SP_REGNUM = 3, /* Stack Pointer. */ + LOONGARCH_A0_REGNUM = 4, /* First Argument/Return Value. */ + LOONGARCH_A7_REGNUM = 11, /* Seventh Argument/Syscall Number. */ + LOONGARCH_FP_REGNUM = 22, /* Frame Pointer. */ + LOONGARCH_ORIG_A0_REGNUM = 32, /* Syscall's original arg0. */ + LOONGARCH_PC_REGNUM = 33, /* Program Counter. */ + LOONGARCH_BADV_REGNUM = 34, /* Bad Vaddr for Addressing Exception. */ + LOONGARCH_LINUX_NUM_GREGSET = 45, /* 32 GPR, ORIG_A0, PC, BADV, RESERVED 10. */ + LOONGARCH_ARG_REGNUM = 8, /* r4-r11: general-purpose argument registers. + f0-f7: floating-point argument registers. */ +}; + /* The set of LoongArch architectural features that we track that impact how we configure the actual gdbarch instance. We hold one of these in the gdbarch_tdep structure, and use it to distinguish between different diff --git a/gdb/loongarch-tdep.h b/gdb/loongarch-tdep.h index 672bc2b80de..b68a7892f2b 100644 --- a/gdb/loongarch-tdep.h +++ b/gdb/loongarch-tdep.h @@ -27,22 +27,6 @@ #include "elf/loongarch.h" #include "opcode/loongarch.h" -/* Register numbers of various important registers. */ -enum -{ - LOONGARCH_RA_REGNUM = 1, /* Return Address. */ - LOONGARCH_SP_REGNUM = 3, /* Stack Pointer. */ - LOONGARCH_A0_REGNUM = 4, /* First Argument/Return Value. */ - LOONGARCH_A7_REGNUM = 11, /* Seventh Argument/Syscall Number. */ - LOONGARCH_FP_REGNUM = 22, /* Frame Pointer. */ - LOONGARCH_ORIG_A0_REGNUM = 32, /* Syscall's original arg0. */ - LOONGARCH_PC_REGNUM = 33, /* Program Counter. */ - LOONGARCH_BADV_REGNUM = 34, /* Bad Vaddr for Addressing Exception. */ - LOONGARCH_LINUX_NUM_GREGSET = 45, /* 32 GPR, ORIG_A0, PC, BADV, RESERVED 10. */ - LOONGARCH_ARG_REGNUM = 8, /* r4-r11: general-purpose argument registers. - f0-f7: floating-point argument registers. */ -}; - /* Register set definitions. */ extern const struct regset loongarch_gregset; diff --git a/gdbserver/linux-loongarch-low.cc b/gdbserver/linux-loongarch-low.cc index 5d3739354e6..7b81e4b786a 100644 --- a/gdbserver/linux-loongarch-low.cc +++ b/gdbserver/linux-loongarch-low.cc @@ -94,15 +94,13 @@ loongarch_target::low_arch_setup () static void loongarch_fill_gregset (struct regcache *regcache, void *buf) { - const struct target_desc *tdesc = regcache->tdesc; elf_gregset_t *regset = (elf_gregset_t *) buf; - int regno = find_regno (tdesc, "r0"); int i; for (i = 1; i < 32; i++) - collect_register (regcache, regno + i, *regset + i); - collect_register_by_name (regcache, "pc", *regset + 32); - collect_register_by_name (regcache, "badv", *regset + 33); + collect_register (regcache, i, *regset + i); + collect_register (regcache, LOONGARCH_PC_REGNUM, *regset + LOONGARCH_PC_REGNUM); + collect_register (regcache, LOONGARCH_BADV_REGNUM, *regset + LOONGARCH_BADV_REGNUM); } /* Supply GPRs from BUF into REGCACHE. */ @@ -110,16 +108,14 @@ loongarch_fill_gregset (struct regcache *regcache, void *buf) static void loongarch_store_gregset (struct regcache *regcache, const void *buf) { - const struct target_desc *tdesc = regcache->tdesc; const elf_gregset_t *regset = (const elf_gregset_t *) buf; - int regno = find_regno (tdesc, "r0"); int i; - supply_register_zeroed (regcache, regno); + supply_register_zeroed (regcache, 0); for (i = 1; i < 32; i++) - supply_register (regcache, regno + i, *regset + i); - supply_register_by_name (regcache, "pc", *regset + 32); - supply_register_by_name (regcache, "badv", *regset + 33); + supply_register (regcache, i, *regset + i); + supply_register (regcache, LOONGARCH_PC_REGNUM, *regset + LOONGARCH_PC_REGNUM); + supply_register (regcache, LOONGARCH_BADV_REGNUM, *regset + LOONGARCH_BADV_REGNUM); } /* LoongArch/Linux regsets. */ @@ -158,11 +154,9 @@ loongarch_target::get_regs_info () bool loongarch_target::low_fetch_register (regcache *regcache, int regno) { - const struct target_desc *tdesc = regcache->tdesc; - - if (regno != find_regno (tdesc, "r0")) + if (regno != 0) return false; - supply_register_zeroed (regcache, regno); + supply_register_zeroed (regcache, 0); return true; } -- 2.30.2