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 "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. */
static void
@ -172,8 +177,13 @@ loongarch_iterate_over_regset_sections (struct gdbarch *gdbarch,
void *cb_data,
const struct regcache *regcache)
{
cb (".reg", sizeof (elf_gregset_t), sizeof (elf_gregset_t),
&loongarch_gregset, NULL, cb_data);
loongarch_gdbarch_tdep *tdep
= (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. */