mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-26 11:33:45 +08:00
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 <tangyouling@loongson.cn> Signed-off-by: Tiezhu Yang <yangtiezhu@loongson.cn>
This commit is contained in:
parent
e5c0531cfe
commit
3eba483364
@ -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
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user