Remove use of deprecated_add_core_fns in cris_tdep.c
The non-deprecated equivalent is implementing the gdbarch function iterate_over_regset_sections, this patch does that. Tested by generating a core file on cris under qemu and comparing the output of "info registers". This also fixes this warning when loading cris core files: warning: Unexpected size of section `.reg/164' in core file. gdb/ChangeLog: 2020-02-11 Christian Biesinger <cbiesinger@google.com> * cris-tdep.c (cris_supply_gregset): Change signature to match what struct regset expects. (cris_regset): New struct. (fetch_core_registers): Remove. (cris_iterate_over_regset_sections): New function. (_initialize_cris_tdep): Don't call deprecated_add_core_fns. (cris_gdbarch_init): Call set_gdbarch_iterate_over_regset_sections. Change-Id: Ieef895b5a2fdc797d1a913cd1c0c07563edfe8e7
This commit is contained in:
parent
f6be87130b
commit
69ed9b74b6
@ -1,3 +1,13 @@
|
||||
2020-02-11 Christian Biesinger <cbiesinger@google.com>
|
||||
|
||||
* cris-tdep.c (cris_supply_gregset): Change signature to match
|
||||
what struct regset expects.
|
||||
(cris_regset): New struct.
|
||||
(fetch_core_registers): Remove.
|
||||
(cris_iterate_over_regset_sections): New function.
|
||||
(_initialize_cris_tdep): Don't call deprecated_add_core_fns.
|
||||
(cris_gdbarch_init): Call set_gdbarch_iterate_over_regset_sections.
|
||||
|
||||
2020-02-11 Christian Biesinger <cbiesinger@google.com>
|
||||
|
||||
* arch/arm.h (enum gdb_regnum): Add comment for the FP0..7
|
||||
|
@ -37,6 +37,7 @@
|
||||
#include "osabi.h"
|
||||
#include "arch-utils.h"
|
||||
#include "regcache.h"
|
||||
#include "regset.h"
|
||||
|
||||
#include "objfiles.h"
|
||||
|
||||
@ -3761,21 +3762,28 @@ typedef cris_elf_greg_t crisv32_elf_gregset_t[CRISV32_ELF_NGREG];
|
||||
/* Unpack a cris_elf_gregset_t into GDB's register cache. */
|
||||
|
||||
static void
|
||||
cris_supply_gregset (struct regcache *regcache, cris_elf_gregset_t *gregsetp)
|
||||
cris_supply_gregset (const struct regset *regset, struct regcache *regcache,
|
||||
int regnum, const void *gregs, size_t len)
|
||||
{
|
||||
struct gdbarch *gdbarch = regcache->arch ();
|
||||
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
|
||||
int i;
|
||||
cris_elf_greg_t *regp = *gregsetp;
|
||||
const cris_elf_greg_t *regp = static_cast<const cris_elf_greg_t *>(gregs);
|
||||
|
||||
if (len != sizeof (cris_elf_gregset_t)
|
||||
&& len != sizeof (crisv32_elf_gregset_t))
|
||||
warning (_("wrong size gregset struct in core file"));
|
||||
gdb_assert (len >= sizeof (crisv32_elf_gregset_t));
|
||||
|
||||
/* The kernel dumps all 32 registers as unsigned longs, but supply_register
|
||||
knows about the actual size of each register so that's no problem. */
|
||||
for (i = 0; i < NUM_GENREGS + NUM_SPECREGS; i++)
|
||||
{
|
||||
regcache->raw_supply (i, (char *)®p[i]);
|
||||
if (regnum == -1 || regnum == i)
|
||||
regcache->raw_supply (i, (char *)®p[i]);
|
||||
}
|
||||
|
||||
if (tdep->cris_version == 32)
|
||||
if (tdep->cris_version == 32 && (regnum == -1 || regnum == ERP_REGNUM))
|
||||
{
|
||||
/* Needed to set pseudo-register PC for CRISv32. */
|
||||
/* FIXME: If ERP is in a delay slot at this point then the PC will
|
||||
@ -3788,47 +3796,24 @@ cris_supply_gregset (struct regcache *regcache, cris_elf_gregset_t *gregsetp)
|
||||
}
|
||||
}
|
||||
|
||||
/* Use a local version of this function to get the correct types for
|
||||
regsets, until multi-arch core support is ready. */
|
||||
|
||||
static void
|
||||
fetch_core_registers (struct regcache *regcache,
|
||||
gdb_byte *core_reg_sect, unsigned core_reg_size,
|
||||
int which, CORE_ADDR reg_addr)
|
||||
{
|
||||
cris_elf_gregset_t gregset;
|
||||
|
||||
switch (which)
|
||||
{
|
||||
case 0:
|
||||
if (core_reg_size != sizeof (cris_elf_gregset_t)
|
||||
&& core_reg_size != sizeof (crisv32_elf_gregset_t))
|
||||
{
|
||||
warning (_("wrong size gregset struct in core file"));
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy (&gregset, core_reg_sect, sizeof (gregset));
|
||||
cris_supply_gregset (regcache, &gregset);
|
||||
}
|
||||
|
||||
default:
|
||||
/* We've covered all the kinds of registers we know about here,
|
||||
so this must be something we wouldn't know what to do with
|
||||
anyway. Just ignore it. */
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static struct core_fns cris_elf_core_fns =
|
||||
{
|
||||
bfd_target_elf_flavour, /* core_flavour */
|
||||
default_check_format, /* check_format */
|
||||
default_core_sniffer, /* core_sniffer */
|
||||
fetch_core_registers, /* core_read_registers */
|
||||
NULL /* next */
|
||||
static const struct regset cris_regset = {
|
||||
nullptr,
|
||||
cris_supply_gregset,
|
||||
/* We don't need a collect function because we only use this for core files
|
||||
(via iterate_over_regset_sections). */
|
||||
nullptr,
|
||||
REGSET_VARIABLE_SIZE
|
||||
};
|
||||
|
||||
static void cris_iterate_over_regset_sections (struct gdbarch *gdbarch,
|
||||
iterate_over_regset_sections_cb *cb,
|
||||
void *cb_data,
|
||||
const struct regcache *regcache)
|
||||
{
|
||||
cb (".reg", sizeof (crisv32_elf_gregset_t), sizeof (crisv32_elf_gregset_t),
|
||||
&cris_regset, NULL, cb_data);
|
||||
}
|
||||
|
||||
void _initialize_cris_tdep ();
|
||||
void
|
||||
_initialize_cris_tdep ()
|
||||
@ -3868,8 +3853,6 @@ Makes GDB use the NRP register instead of the ERP register in certain cases."),
|
||||
NULL, /* FIXME: i18n: Usage of Dwarf-2 CFI
|
||||
for CRIS is %d. */
|
||||
&setlist, &showlist);
|
||||
|
||||
deprecated_add_core_fns (&cris_elf_core_fns);
|
||||
}
|
||||
|
||||
/* Prints out all target specific values. */
|
||||
@ -4059,6 +4042,7 @@ cris_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
||||
|
||||
set_gdbarch_breakpoint_kind_from_pc (gdbarch, cris_breakpoint_kind_from_pc);
|
||||
set_gdbarch_sw_breakpoint_from_kind (gdbarch, cris_sw_breakpoint_from_kind);
|
||||
set_gdbarch_iterate_over_regset_sections (gdbarch, cris_iterate_over_regset_sections);
|
||||
|
||||
if (tdep->cris_dwarf2_cfi == 1)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user