Fix loongarch_iterate_over_regset_sections for non-native targets.

Define a constant for the number of registers stored in a register set
and use this with register_size to compute the size of the
general-purpose register set in core dumps.

This also fixes the build on hosts such as FreeBSD that do not define
an elf_gregset_t type.
This commit is contained in:
John Baldwin
2022-05-23 10:59:13 -07:00
parent a6b446b222
commit d9b6e047f6

View File

@ -29,6 +29,11 @@
#include "trad-frame.h" #include "trad-frame.h"
#include "tramp-frame.h" #include "tramp-frame.h"
/* The general-purpose regset consists of 32 R registers, plus PC,
and BADV registers. */
#define LOONGARCH_LINUX_NUM_GREGSET (34)
/* Unpack an elf_gregset_t into GDB's register cache. */ /* Unpack an elf_gregset_t into GDB's register cache. */
static void static void
@ -172,8 +177,13 @@ loongarch_iterate_over_regset_sections (struct gdbarch *gdbarch,
void *cb_data, void *cb_data,
const struct regcache *regcache) const struct regcache *regcache)
{ {
cb (".reg", sizeof (elf_gregset_t), sizeof (elf_gregset_t), loongarch_gdbarch_tdep *tdep
&loongarch_gregset, NULL, cb_data); = (loongarch_gdbarch_tdep *) gdbarch_tdep (gdbarch);
auto regs = tdep->regs;
int regsize = register_size (gdbarch, regs.r);
cb (".reg", LOONGARCH_LINUX_NUM_GREGSET * regsize,
LOONGARCH_LINUX_NUM_GREGSET * regsize, &loongarch_gregset, NULL, cb_data);
} }
/* Initialize LoongArch Linux ABI info. */ /* Initialize LoongArch Linux ABI info. */