#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
#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;
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. */
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. */
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;
}