forked from Imagelibrary/binutils-gdb
Add 'regset' parameter to 'iterate_over_regset_sections_cb'
This adds the 'regset' parameter to the iterator callback. Consequently the 'regset_from_core_section' method is dropped for all targets that provide the iterator method. This change prepares for replacing regset_from_core_section everywhere, thereby eliminating one gdbarch interface. Since the iterator is usually no more complex than regset_from_core_section alone, targets that previously didn't define core_regset_sections will then gain multi-arch capable core file generation support without increased complexity. gdb/ChangeLog: * gdbarch.sh (iterate_over_regset_sections_cb): Add regset parameter. * gdbarch.h: Regenerate. * corelow.c (sniff_core_bfd): Don't sniff if gdbarch has a regset iterator. (get_core_register_section): Add parameter 'regset' and use it, if set. Add parameter 'min_size' and verify the bfd section size against it. (get_core_registers_cb): Add parameter 'regset' and pass it to get_core_register section. For the "standard" register sections ".reg" and ".reg2", set an appropriate default for human_name. (get_core_registers): Don't abort when the gdbarch has an iterator but no regset_from_core_section. Add NULL/0 for parameters 'regset'/'min_size' in calls to get_core_register_section. * linux-tdep.c (linux_collect_regset_section_cb): Add parameter 'regset' and use it instead of calling the regset_from_core_section gdbarch method. * i386-tdep.h (struct gdbarch_tdep): Add field 'fpregset'. * i386-tdep.c (i386_supply_xstateregset) (i386_collect_xstateregset, i386_xstateregset): Moved to i386-linux-tdep.c. (i386_regset_from_core_section): Drop handling for .reg-xfp and .reg-xstate. (i386_gdbarch_init): Set tdep field 'fpregset'. Enable generic core file support only if the regset iterator hasn't been set. * i386-linux-tdep.c (i386_linux_supply_xstateregset) (i386_linux_collect_xstateregset, i386_linux_xstateregset): New. Moved from i386-tdep.c and renamed to *_linux*. (i386_linux_iterate_over_regset_sections): Add regset parameter to each callback invocation. Allow any .reg-xstate size when reading from a core file. * amd64-tdep.c (amd64_supply_xstateregset) (amd64_collect_xstateregset, amd64_xstateregset): Moved to amd64-linux-tdep.c. (amd64_regset_from_core_section): Remove. (amd64_init_abi): Set new tdep field 'fpregset'. No longer install an amd64-specific regset_from_core_section gdbarch method. * amd64-linux-tdep.c (amd64_linux_supply_xstateregset) (amd64_linux_collect_xstateregset, amd64_linux_xstateregset): New. Moved from amd64-tdep.c and renamed to *_linux*. (amd64_linux_iterate_over_regset_sections): Add regset parameter to each callback invocation. Allow any .reg-xstate size when reading from a core file. * arm-linux-tdep.c (arm_linux_regset_from_core_section): Remove. (arm_linux_iterate_over_regset_sections): Add regset parameter to each callback invocation. (arm_linux_init_abi): No longer set the regset_from_core_section gdbarch method. * ppc-linux-tdep.c (ppc_linux_regset_from_core_section): Remove. (ppc_linux_iterate_over_regset_sections): Add regset parameter to each callback invocation. (ppc_linux_init_abi): No longer set the regset_from_core_section gdbarch method. * s390-linux-tdep.c (struct gdbarch_tdep): Remove the fields gregset, sizeof_gregset, fpregset, and sizeof_fpregset. (s390_regset_from_core_section): Remove. (s390_iterate_over_regset_sections): Add regset parameter to each callback invocation. (s390_gdbarch_init): No longer set the regset_from_core_section gdbarch method. Drop initialization of deleted tdep fields.
This commit is contained in:
committed by
Andreas Krebbel
parent
5aa82d050d
commit
8f0435f75e
@@ -3806,26 +3806,6 @@ i386_collect_fpregset (const struct regset *regset,
|
||||
i387_collect_fsave (regcache, regnum, fpregs);
|
||||
}
|
||||
|
||||
/* Similar to i386_supply_fpregset, but use XSAVE extended state. */
|
||||
|
||||
static void
|
||||
i386_supply_xstateregset (const struct regset *regset,
|
||||
struct regcache *regcache, int regnum,
|
||||
const void *xstateregs, size_t len)
|
||||
{
|
||||
i387_supply_xsave (regcache, regnum, xstateregs);
|
||||
}
|
||||
|
||||
/* Similar to i386_collect_fpregset , but use XSAVE extended state. */
|
||||
|
||||
static void
|
||||
i386_collect_xstateregset (const struct regset *regset,
|
||||
const struct regcache *regcache,
|
||||
int regnum, void *xstateregs, size_t len)
|
||||
{
|
||||
i387_collect_xsave (regcache, regnum, xstateregs, 1);
|
||||
}
|
||||
|
||||
/* Register set definitions. */
|
||||
|
||||
const struct regset i386_gregset =
|
||||
@@ -3833,16 +3813,11 @@ const struct regset i386_gregset =
|
||||
NULL, i386_supply_gregset, i386_collect_gregset
|
||||
};
|
||||
|
||||
static const struct regset i386_fpregset =
|
||||
const struct regset i386_fpregset =
|
||||
{
|
||||
NULL, i386_supply_fpregset, i386_collect_fpregset
|
||||
};
|
||||
|
||||
static const struct regset i386_xstateregset =
|
||||
{
|
||||
NULL, i386_supply_xstateregset, i386_collect_xstateregset
|
||||
};
|
||||
|
||||
/* Return the appropriate register set for the core section identified
|
||||
by SECT_NAME and SECT_SIZE. */
|
||||
|
||||
@@ -3853,15 +3828,10 @@ i386_regset_from_core_section (struct gdbarch *gdbarch,
|
||||
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
|
||||
|
||||
if (strcmp (sect_name, ".reg") == 0 && sect_size == tdep->sizeof_gregset)
|
||||
return &i386_gregset;
|
||||
return &i386_gregset;
|
||||
|
||||
if ((strcmp (sect_name, ".reg2") == 0 && sect_size == tdep->sizeof_fpregset)
|
||||
|| (strcmp (sect_name, ".reg-xfp") == 0
|
||||
&& sect_size == I387_SIZEOF_FXSAVE))
|
||||
return &i386_fpregset;
|
||||
|
||||
if (strcmp (sect_name, ".reg-xstate") == 0)
|
||||
return &i386_xstateregset;
|
||||
if (strcmp (sect_name, ".reg2") == 0 && sect_size == tdep->sizeof_fpregset)
|
||||
return tdep->fpregset;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
@@ -8291,6 +8261,7 @@ i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
||||
|
||||
/* Floating-point registers. */
|
||||
tdep->sizeof_fpregset = I387_SIZEOF_FSAVE;
|
||||
tdep->fpregset = &i386_fpregset;
|
||||
|
||||
/* The default settings include the FPU registers, the MMX registers
|
||||
and the SSE registers. This can be overridden for a specific ABI
|
||||
@@ -8595,7 +8566,8 @@ i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
|
||||
/* If we have a register mapping, enable the generic core file
|
||||
support, unless it has already been enabled. */
|
||||
if (tdep->gregset_reg_offset
|
||||
&& !gdbarch_regset_from_core_section_p (gdbarch))
|
||||
&& !gdbarch_regset_from_core_section_p (gdbarch)
|
||||
&& !gdbarch_iterate_over_regset_sections_p (gdbarch))
|
||||
set_gdbarch_regset_from_core_section (gdbarch,
|
||||
i386_regset_from_core_section);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user