gdbserver: LoongArch: Simplify code with register number macros
authorYouling Tang <tangyouling@loongson.cn>
Sun, 10 Jul 2022 02:22:33 +0000 (10:22 +0800)
committerTiezhu Yang <yangtiezhu@loongson.cn>
Sun, 10 Jul 2022 09:27:50 +0000 (17:27 +0800)
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 <tangyouling@loongson.cn>
Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
gdb/arch/loongarch.h
gdb/loongarch-tdep.h
gdbserver/linux-loongarch-low.cc

index 8194ea66c0a050095038b20bd436f7bcf93a5d09..5cf5498079aa8057726a49c8eb1e8ba23d05023c 100644 (file)
 
 #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
index 672bc2b80dea4897595ba22e3fe995b0bd9c9040..b68a7892f2b9aa11cad82a82dc549153a1d091dc 100644 (file)
 #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;
 
index 5d3739354e6640c5b19a0e0dd30e05abc062f38e..7b81e4b786aebf69a156a5e9453e2d6363023f3a 100644 (file)
@@ -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;
 }