summaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog58
-rw-r--r--gdb/aarch64-fbsd-tdep.c8
-rw-r--r--gdb/aarch64-linux-tdep.c8
-rw-r--r--gdb/alpha-linux-tdep.c4
-rw-r--r--gdb/alpha-nbsd-tdep.c6
-rw-r--r--gdb/amd64-fbsd-tdep.c8
-rw-r--r--gdb/amd64-linux-tdep.c6
-rw-r--r--gdb/arm-bsd-tdep.c6
-rw-r--r--gdb/arm-fbsd-tdep.c7
-rw-r--r--gdb/arm-linux-tdep.c11
-rw-r--r--gdb/corelow.c10
-rw-r--r--gdb/fbsd-tdep.c10
-rw-r--r--gdb/frv-linux-tdep.c8
-rw-r--r--gdb/gdbarch.h12
-rwxr-xr-xgdb/gdbarch.sh12
-rw-r--r--gdb/hppa-linux-tdep.c6
-rw-r--r--gdb/hppa-nbsd-tdep.c3
-rw-r--r--gdb/hppa-obsd-tdep.c6
-rw-r--r--gdb/i386-fbsd-tdep.c11
-rw-r--r--gdb/i386-linux-tdep.c9
-rw-r--r--gdb/i386-tdep.c6
-rw-r--r--gdb/ia64-linux-tdep.c6
-rw-r--r--gdb/linux-tdep.c15
-rw-r--r--gdb/m32r-linux-tdep.c3
-rw-r--r--gdb/m68k-bsd-tdep.c6
-rw-r--r--gdb/m68k-linux-tdep.c6
-rw-r--r--gdb/mips-fbsd-tdep.c8
-rw-r--r--gdb/mips-linux-tdep.c14
-rw-r--r--gdb/mips-nbsd-tdep.c8
-rw-r--r--gdb/mips64-obsd-tdep.c3
-rw-r--r--gdb/mn10300-linux-tdep.c8
-rw-r--r--gdb/nios2-linux-tdep.c3
-rw-r--r--gdb/ppc-fbsd-tdep.c6
-rw-r--r--gdb/ppc-linux-tdep.c12
-rw-r--r--gdb/ppc-nbsd-tdep.c4
-rw-r--r--gdb/ppc-obsd-tdep.c2
-rw-r--r--gdb/riscv-linux-tdep.c2
-rw-r--r--gdb/rs6000-aix-tdep.c4
-rw-r--r--gdb/s390-linux-tdep.c23
-rw-r--r--gdb/score-tdep.c4
-rw-r--r--gdb/sh-tdep.c6
-rw-r--r--gdb/sparc-tdep.c6
-rw-r--r--gdb/tilegx-linux-tdep.c4
-rw-r--r--gdb/vax-tdep.c2
-rw-r--r--gdb/xtensa-tdep.c4
45 files changed, 240 insertions, 134 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 8559185eb89..1076433676e 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,61 @@
+2018-08-13 Alan Hayward <alan.hayward@arm.com>
+
+ * aarch64-fbsd-tdep.c
+ (aarch64_fbsd_iterate_over_regset_sections): Add supply_size and
+ collect_size.
+ * aarch64-linux-tdep.c
+ (aarch64_linux_iterate_over_regset_sections): Likewise.
+ * alpha-linux-tdep.c
+ (alpha_linux_iterate_over_regset_sections):
+ * alpha-nbsd-tdep.c
+ (alphanbsd_iterate_over_regset_sections): Likewise.
+ * amd64-fbsd-tdep.c
+ (amd64fbsd_iterate_over_regset_sections): Likewise.
+ * amd64-linux-tdep.c
+ (amd64_linux_iterate_over_regset_sections): Likewise.
+ * arm-bsd-tdep.c
+ (armbsd_iterate_over_regset_sections): Likewise.
+ * arm-fbsd-tdep.c
+ (arm_fbsd_iterate_over_regset_sections): Likewise.
+ * arm-linux-tdep.c
+ (arm_linux_iterate_over_regset_sections): Likewise.
+ * corelow.c (get_core_registers_cb): Likewise.
+ (core_target::fetch_registers): Likewise.
+ * fbsd-tdep.c (fbsd_collect_regset_section_cb): Likewise.
+ * frv-linux-tdep.c (frv_linux_iterate_over_regset_sections): Likewise.
+ * gdbarch.h (void): Regenerate.
+ * gdbarch.sh: Add supply_size and collect_size.
+ * hppa-linux-tdep.c (hppa_linux_iterate_over_regset_sections): Likewise.
+ * hppa-nbsd-tdep.c (hppanbsd_iterate_over_regset_sections): Likewise.
+ * hppa-obsd-tdep.c (hppaobsd_iterate_over_regset_sections): Likewise.
+ * i386-fbsd-tdep.c (i386fbsd_iterate_over_regset_sections): Likewise.
+ * i386-linux-tdep.c (i386_linux_iterate_over_regset_sections): Likewise.
+ * i386-tdep.c (i386_iterate_over_regset_sections): Likewise.
+ * ia64-linux-tdep.c (ia64_linux_iterate_over_regset_sections): Likewise.
+ * linux-tdep.c (linux_collect_regset_section_cb): Likewise.
+ * m32r-linux-tdep.c (m32r_linux_iterate_over_regset_sections): Likewise.
+ * m68k-bsd-tdep.c (m68kbsd_iterate_over_regset_sections): Likewise.
+ * m68k-linux-tdep.c (m68k_linux_iterate_over_regset_sections): Likewise.
+ * mips-fbsd-tdep.c (mips_fbsd_iterate_over_regset_sections): Likewise.
+ * mips-linux-tdep.c (mips_linux_iterate_over_regset_sections): Likewise.
+ * mips-nbsd-tdep.c (mipsnbsd_iterate_over_regset_sections): Likewise.
+ * mips64-obsd-tdep.c (mips64obsd_iterate_over_regset_sections): Likewise.
+ * mn10300-linux-tdep.c (am33_iterate_over_regset_sections): Likewise.
+ * nios2-linux-tdep.c (nios2_iterate_over_regset_sections): Likewise.
+ * ppc-fbsd-tdep.c (ppcfbsd_iterate_over_regset_sections): Likewise.
+ * ppc-linux-tdep.c (ppc_linux_iterate_over_regset_sections): Likewise.
+ * ppc-nbsd-tdep.c (ppcnbsd_iterate_over_regset_sections): Likewise.
+ * ppc-obsd-tdep.c (ppcobsd_iterate_over_regset_sections): Likewise.
+ * riscv-linux-tdep.c (riscv_linux_iterate_over_regset_sections): Likewise.
+ * rs6000-aix-tdep.c (rs6000_aix_iterate_over_regset_sections): Likewise.
+ * s390-linux-tdep.c (s390_iterate_over_regset_sections): Likewise.
+ * score-tdep.c (score7_linux_iterate_over_regset_sections): Likewise.
+ * sh-tdep.c (sh_iterate_over_regset_sections): Likewise.
+ * sparc-tdep.c (sparc_iterate_over_regset_sections): Likewise.
+ * tilegx-linux-tdep.c (tilegx_iterate_over_regset_sections): Likewise.
+ * vax-tdep.c (vax_iterate_over_regset_sections): Likewise.
+ * xtensa-tdep.c (xtensa_iterate_over_regset_sections): Likewise.
+
2018-08-10 Simon Marchi <simon.marchi@ericsson.com>
* nat/linux-osdata.c (commandline_from_pid): Replace xstrprintf
diff --git a/gdb/aarch64-fbsd-tdep.c b/gdb/aarch64-fbsd-tdep.c
index 21beb5b77c8..9f8b1366ce1 100644
--- a/gdb/aarch64-fbsd-tdep.c
+++ b/gdb/aarch64-fbsd-tdep.c
@@ -169,10 +169,10 @@ aarch64_fbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
void *cb_data,
const struct regcache *regcache)
{
- cb (".reg", AARCH64_FBSD_SIZEOF_GREGSET, &aarch64_fbsd_gregset,
- NULL, cb_data);
- cb (".reg2", AARCH64_FBSD_SIZEOF_FPREGSET, &aarch64_fbsd_fpregset,
- NULL, cb_data);
+ cb (".reg", AARCH64_FBSD_SIZEOF_GREGSET, AARCH64_FBSD_SIZEOF_GREGSET,
+ &aarch64_fbsd_gregset, NULL, cb_data);
+ cb (".reg2", AARCH64_FBSD_SIZEOF_FPREGSET, AARCH64_FBSD_SIZEOF_FPREGSET,
+ &aarch64_fbsd_fpregset, NULL, cb_data);
}
/* Implement the 'init_osabi' method of struct gdb_osabi_handler. */
diff --git a/gdb/aarch64-linux-tdep.c b/gdb/aarch64-linux-tdep.c
index 93b6d416a3e..7b63cddbe66 100644
--- a/gdb/aarch64-linux-tdep.c
+++ b/gdb/aarch64-linux-tdep.c
@@ -227,10 +227,10 @@ aarch64_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
void *cb_data,
const struct regcache *regcache)
{
- cb (".reg", AARCH64_LINUX_SIZEOF_GREGSET, &aarch64_linux_gregset,
- NULL, cb_data);
- cb (".reg2", AARCH64_LINUX_SIZEOF_FPREGSET, &aarch64_linux_fpregset,
- NULL, cb_data);
+ cb (".reg", AARCH64_LINUX_SIZEOF_GREGSET, AARCH64_LINUX_SIZEOF_GREGSET,
+ &aarch64_linux_gregset, NULL, cb_data);
+ cb (".reg2", AARCH64_LINUX_SIZEOF_FPREGSET, AARCH64_LINUX_SIZEOF_FPREGSET,
+ &aarch64_linux_fpregset, NULL, cb_data);
}
/* Implement the "core_read_description" gdbarch method. SVE not yet
diff --git a/gdb/alpha-linux-tdep.c b/gdb/alpha-linux-tdep.c
index 8bacb10aa11..913a4204018 100644
--- a/gdb/alpha-linux-tdep.c
+++ b/gdb/alpha-linux-tdep.c
@@ -238,8 +238,8 @@ alpha_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
void *cb_data,
const struct regcache *regcache)
{
- cb (".reg", 32 * 8, &alpha_linux_gregset, NULL, cb_data);
- cb (".reg2", 32 * 8, &alpha_linux_fpregset, NULL, cb_data);
+ cb (".reg", 32 * 8, 32 * 8, &alpha_linux_gregset, NULL, cb_data);
+ cb (".reg2", 32 * 8, 32 * 8, &alpha_linux_fpregset, NULL, cb_data);
}
/* Implementation of `gdbarch_gdb_signal_from_target', as defined in
diff --git a/gdb/alpha-nbsd-tdep.c b/gdb/alpha-nbsd-tdep.c
index dffab3fb37f..694e3d35559 100644
--- a/gdb/alpha-nbsd-tdep.c
+++ b/gdb/alpha-nbsd-tdep.c
@@ -161,8 +161,10 @@ alphanbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
void *cb_data,
const struct regcache *regcache)
{
- cb (".reg", ALPHANBSD_SIZEOF_GREGS, &alphanbsd_gregset, NULL, cb_data);
- cb (".reg2", ALPHANBSD_SIZEOF_FPREGS, &alphanbsd_fpregset, NULL, cb_data);
+ cb (".reg", ALPHANBSD_SIZEOF_GREGS, ALPHANBSD_SIZEOF_GREGS,
+ &alphanbsd_gregset, NULL, cb_data);
+ cb (".reg2", ALPHANBSD_SIZEOF_FPREGS, ALPHANBSD_SIZEOF_FPREGS,
+ &alphanbsd_fpregset, NULL, cb_data);
}
diff --git a/gdb/amd64-fbsd-tdep.c b/gdb/amd64-fbsd-tdep.c
index f5bf1985b67..7f7ecfcf113 100644
--- a/gdb/amd64-fbsd-tdep.c
+++ b/gdb/amd64-fbsd-tdep.c
@@ -196,9 +196,11 @@ amd64fbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
{
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
- cb (".reg", tdep->sizeof_gregset, &i386_gregset, NULL, cb_data);
- cb (".reg2", tdep->sizeof_fpregset, &amd64_fpregset, NULL, cb_data);
- cb (".reg-xstate", X86_XSTATE_SIZE(tdep->xcr0),
+ cb (".reg", tdep->sizeof_gregset, tdep->sizeof_gregset, &i386_gregset, NULL,
+ cb_data);
+ cb (".reg2", tdep->sizeof_fpregset, tdep->sizeof_fpregset, &amd64_fpregset,
+ NULL, cb_data);
+ cb (".reg-xstate", X86_XSTATE_SIZE (tdep->xcr0), X86_XSTATE_SIZE (tdep->xcr0),
&amd64fbsd_xstateregset, "XSAVE extended state", cb_data);
}
diff --git a/gdb/amd64-linux-tdep.c b/gdb/amd64-linux-tdep.c
index 7fe37d83f69..7ab43897ab3 100644
--- a/gdb/amd64-linux-tdep.c
+++ b/gdb/amd64-linux-tdep.c
@@ -1651,9 +1651,9 @@ amd64_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
{
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
- cb (".reg", 27 * 8, &i386_gregset, NULL, cb_data);
- cb (".reg2", 512, &amd64_fpregset, NULL, cb_data);
- cb (".reg-xstate", X86_XSTATE_SIZE (tdep->xcr0),
+ cb (".reg", 27 * 8, 27 * 8, &i386_gregset, NULL, cb_data);
+ cb (".reg2", 512, 512, &amd64_fpregset, NULL, cb_data);
+ cb (".reg-xstate", X86_XSTATE_SIZE (tdep->xcr0), X86_XSTATE_SIZE (tdep->xcr0),
&amd64_linux_xstateregset, "XSAVE extended state", cb_data);
}
diff --git a/gdb/arm-bsd-tdep.c b/gdb/arm-bsd-tdep.c
index a2719caa4c5..8025ab3dee2 100644
--- a/gdb/arm-bsd-tdep.c
+++ b/gdb/arm-bsd-tdep.c
@@ -117,6 +117,8 @@ armbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
void *cb_data,
const struct regcache *regcache)
{
- cb (".reg", ARMBSD_SIZEOF_GREGS, &armbsd_gregset, NULL, cb_data);
- cb (".reg2", ARMBSD_SIZEOF_FPREGS, &armbsd_fpregset, NULL, cb_data);
+ cb (".reg", ARMBSD_SIZEOF_GREGS, ARMBSD_SIZEOF_GREGS, &armbsd_gregset, NULL,
+ cb_data);
+ cb (".reg2", ARMBSD_SIZEOF_FPREGS, ARMBSD_SIZEOF_FPREGS, &armbsd_fpregset,
+ NULL, cb_data);
}
diff --git a/gdb/arm-fbsd-tdep.c b/gdb/arm-fbsd-tdep.c
index 4ad3abdffaf..d2af21bf2c2 100644
--- a/gdb/arm-fbsd-tdep.c
+++ b/gdb/arm-fbsd-tdep.c
@@ -175,14 +175,15 @@ arm_fbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
{
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
- cb (".reg", ARM_FBSD_SIZEOF_GREGSET, &arm_fbsd_gregset, NULL, cb_data);
+ cb (".reg", ARM_FBSD_SIZEOF_GREGSET, ARM_FBSD_SIZEOF_GREGSET,
+ &arm_fbsd_gregset, NULL, cb_data);
/* While FreeBSD/arm cores do contain a NT_FPREGSET / ".reg2"
register set, it is not populated with register values by the
kernel but just contains all zeroes. */
if (tdep->vfp_register_count > 0)
- cb (".reg-arm-vfp", ARM_FBSD_SIZEOF_VFPREGSET, &arm_fbsd_vfpregset,
- "VFP floating-point", cb_data);
+ cb (".reg-arm-vfp", ARM_FBSD_SIZEOF_VFPREGSET, ARM_FBSD_SIZEOF_VFPREGSET,
+ &arm_fbsd_vfpregset, "VFP floating-point", cb_data);
}
/* Lookup a target description from a target's AT_HWCAP auxiliary
diff --git a/gdb/arm-linux-tdep.c b/gdb/arm-linux-tdep.c
index 264e8ca42b2..4c5a4bc32b9 100644
--- a/gdb/arm-linux-tdep.c
+++ b/gdb/arm-linux-tdep.c
@@ -712,14 +712,15 @@ arm_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
{
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
- cb (".reg", ARM_LINUX_SIZEOF_GREGSET, &arm_linux_gregset, NULL, cb_data);
+ cb (".reg", ARM_LINUX_SIZEOF_GREGSET, ARM_LINUX_SIZEOF_GREGSET,
+ &arm_linux_gregset, NULL, cb_data);
if (tdep->vfp_register_count > 0)
- cb (".reg-arm-vfp", ARM_LINUX_SIZEOF_VFP, &arm_linux_vfpregset,
- "VFP floating-point", cb_data);
+ cb (".reg-arm-vfp", ARM_LINUX_SIZEOF_VFP, ARM_LINUX_SIZEOF_VFP,
+ &arm_linux_vfpregset, "VFP floating-point", cb_data);
else if (tdep->have_fpa_registers)
- cb (".reg2", ARM_LINUX_SIZEOF_NWFPE, &arm_linux_fpregset,
- "FPA floating-point", cb_data);
+ cb (".reg2", ARM_LINUX_SIZEOF_NWFPE, ARM_LINUX_SIZEOF_NWFPE,
+ &arm_linux_fpregset, "FPA floating-point", cb_data);
}
/* Determine target description from core file. */
diff --git a/gdb/corelow.c b/gdb/corelow.c
index d3336cf7857..8e9ac9a3281 100644
--- a/gdb/corelow.c
+++ b/gdb/corelow.c
@@ -636,12 +636,17 @@ struct get_core_registers_cb_data
register note section. */
static void
-get_core_registers_cb (const char *sect_name, int size,
+get_core_registers_cb (const char *sect_name, int supply_size, int collect_size,
const struct regset *regset,
const char *human_name, void *cb_data)
{
auto *data = (get_core_registers_cb_data *) cb_data;
bool required = false;
+ bool variable_size_section = (regset != NULL
+ && regset->flags & REGSET_VARIABLE_SIZE);
+
+ if (!variable_size_section)
+ gdb_assert (supply_size == collect_size);
if (strcmp (sect_name, ".reg") == 0)
{
@@ -658,7 +663,8 @@ get_core_registers_cb (const char *sect_name, int size,
/* The 'which' parameter is only used when no regset is provided.
Thus we just set it to -1. */
data->target->get_core_register_section (data->regcache, regset, sect_name,
- size, -1, human_name, required);
+ supply_size, -1, human_name,
+ required);
}
/* Get the registers out of a core file. This is the machine-
diff --git a/gdb/fbsd-tdep.c b/gdb/fbsd-tdep.c
index ac5b3bfa120..78d0c3d830d 100644
--- a/gdb/fbsd-tdep.c
+++ b/gdb/fbsd-tdep.c
@@ -428,8 +428,8 @@ struct fbsd_collect_regset_section_cb_data
};
static void
-fbsd_collect_regset_section_cb (const char *sect_name, int size,
- const struct regset *regset,
+fbsd_collect_regset_section_cb (const char *sect_name, int supply_size,
+ int collect_size, const struct regset *regset,
const char *human_name, void *cb_data)
{
char *buf;
@@ -441,8 +441,8 @@ fbsd_collect_regset_section_cb (const char *sect_name, int size,
gdb_assert (regset->collect_regset);
- buf = (char *) xmalloc (size);
- regset->collect_regset (regset, data->regcache, -1, buf, size);
+ buf = (char *) xmalloc (collect_size);
+ regset->collect_regset (regset, data->regcache, -1, buf, collect_size);
/* PRSTATUS still needs to be treated specially. */
if (strcmp (sect_name, ".reg") == 0)
@@ -452,7 +452,7 @@ fbsd_collect_regset_section_cb (const char *sect_name, int size,
else
data->note_data = (char *) elfcore_write_register_note
(data->obfd, data->note_data, data->note_size,
- sect_name, buf, size);
+ sect_name, buf, collect_size);
xfree (buf);
if (data->note_data == NULL)
diff --git a/gdb/frv-linux-tdep.c b/gdb/frv-linux-tdep.c
index c47f1f24f0b..655c48d787b 100644
--- a/gdb/frv-linux-tdep.c
+++ b/gdb/frv-linux-tdep.c
@@ -445,10 +445,10 @@ frv_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
void *cb_data,
const struct regcache *regcache)
{
- cb (".reg", sizeof (frv_elf_gregset_t), &frv_linux_gregset,
- NULL, cb_data);
- cb (".reg2", sizeof (frv_elf_fpregset_t), &frv_linux_fpregset,
- NULL, cb_data);
+ cb (".reg", sizeof (frv_elf_gregset_t), sizeof (frv_elf_gregset_t),
+ &frv_linux_gregset, NULL, cb_data);
+ cb (".reg2", sizeof (frv_elf_fpregset_t), sizeof (frv_elf_fpregset_t),
+ &frv_linux_fpregset, NULL, cb_data);
}
diff --git a/gdb/gdbarch.h b/gdb/gdbarch.h
index 0df1fd16926..b563f8d165a 100644
--- a/gdb/gdbarch.h
+++ b/gdb/gdbarch.h
@@ -92,13 +92,15 @@ typedef int (iterate_over_objfiles_in_search_order_cb_ftype)
/* Callback type for regset section iterators. The callback usually
invokes the REGSET's supply or collect method, to which it must
- pass a buffer with at least the given SIZE. SECT_NAME is a BFD
- section name, and HUMAN_NAME is used for diagnostic messages.
- CB_DATA should have been passed unchanged through the iterator. */
+ pass a buffer - for collects this buffer will need to be created using
+ COLLECT_SIZE, for supply the existing buffer being read from should
+ be at least SUPPLY_SIZE. SECT_NAME is a BFD section name, and HUMAN_NAME
+ is used for diagnostic messages. CB_DATA should have been passed
+ unchanged through the iterator. */
typedef void (iterate_over_regset_sections_cb)
- (const char *sect_name, int size, const struct regset *regset,
- const char *human_name, void *cb_data);
+ (const char *sect_name, int supply_size, int collect_size,
+ const struct regset *regset, const char *human_name, void *cb_data);
/* The following are pre-initialized by GDBARCH. */
diff --git a/gdb/gdbarch.sh b/gdb/gdbarch.sh
index 447394381e2..24a553b73c3 100755
--- a/gdb/gdbarch.sh
+++ b/gdb/gdbarch.sh
@@ -1316,13 +1316,15 @@ typedef int (iterate_over_objfiles_in_search_order_cb_ftype)
/* Callback type for regset section iterators. The callback usually
invokes the REGSET's supply or collect method, to which it must
- pass a buffer with at least the given SIZE. SECT_NAME is a BFD
- section name, and HUMAN_NAME is used for diagnostic messages.
- CB_DATA should have been passed unchanged through the iterator. */
+ pass a buffer - for collects this buffer will need to be created using
+ COLLECT_SIZE, for supply the existing buffer being read from should
+ be at least SUPPLY_SIZE. SECT_NAME is a BFD section name, and HUMAN_NAME
+ is used for diagnostic messages. CB_DATA should have been passed
+ unchanged through the iterator. */
typedef void (iterate_over_regset_sections_cb)
- (const char *sect_name, int size, const struct regset *regset,
- const char *human_name, void *cb_data);
+ (const char *sect_name, int supply_size, int collect_size,
+ const struct regset *regset, const char *human_name, void *cb_data);
EOF
# function typedef's
diff --git a/gdb/hppa-linux-tdep.c b/gdb/hppa-linux-tdep.c
index 080fc0449be..c4c169fe989 100644
--- a/gdb/hppa-linux-tdep.c
+++ b/gdb/hppa-linux-tdep.c
@@ -479,9 +479,9 @@ hppa_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
{
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
- cb (".reg", 80 * tdep->bytes_per_address, &hppa_linux_regset,
- NULL, cb_data);
- cb (".reg2", 64 * 4, &hppa_linux_fpregset, NULL, cb_data);
+ cb (".reg", 80 * tdep->bytes_per_address, 80 * tdep->bytes_per_address,
+ &hppa_linux_regset, NULL, cb_data);
+ cb (".reg2", 64 * 4, 64 * 4, &hppa_linux_fpregset, NULL, cb_data);
}
static void
diff --git a/gdb/hppa-nbsd-tdep.c b/gdb/hppa-nbsd-tdep.c
index f9932b5b805..49bf17b1ccb 100644
--- a/gdb/hppa-nbsd-tdep.c
+++ b/gdb/hppa-nbsd-tdep.c
@@ -190,7 +190,8 @@ hppanbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
void *cb_data,
const struct regcache *regcache)
{
- cb (".reg", HPPANBSD_SIZEOF_GREGS, &hppanbsd_gregset, NULL, cb_data);
+ cb (".reg", HPPANBSD_SIZEOF_GREGS, HPPANBSD_SIZEOF_GREGS, &hppanbsd_gregset,
+ NULL, cb_data);
}
static void
diff --git a/gdb/hppa-obsd-tdep.c b/gdb/hppa-obsd-tdep.c
index 403e9ddc827..97d5a2bf010 100644
--- a/gdb/hppa-obsd-tdep.c
+++ b/gdb/hppa-obsd-tdep.c
@@ -149,8 +149,10 @@ hppaobsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
void *cb_data,
const struct regcache *regcache)
{
- cb (".reg", HPPAOBSD_SIZEOF_GREGS, &hppaobsd_gregset, NULL, cb_data);
- cb (".reg2", HPPAOBSD_SIZEOF_FPREGS, &hppaobsd_fpregset, NULL, cb_data);
+ cb (".reg", HPPAOBSD_SIZEOF_GREGS, HPPAOBSD_SIZEOF_GREGS, &hppaobsd_gregset,
+ NULL, cb_data);
+ cb (".reg2", HPPAOBSD_SIZEOF_FPREGS, HPPAOBSD_SIZEOF_FPREGS,
+ &hppaobsd_fpregset, NULL, cb_data);
}
diff --git a/gdb/i386-fbsd-tdep.c b/gdb/i386-fbsd-tdep.c
index ebc75a8d585..22c8d4506b9 100644
--- a/gdb/i386-fbsd-tdep.c
+++ b/gdb/i386-fbsd-tdep.c
@@ -309,12 +309,15 @@ i386fbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
{
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
- cb (".reg", tdep->sizeof_gregset, &i386_gregset, NULL, cb_data);
- cb (".reg2", tdep->sizeof_fpregset, &i386_fpregset, NULL, cb_data);
+ cb (".reg", tdep->sizeof_gregset, tdep->sizeof_gregset, &i386_gregset, NULL,
+ cb_data);
+ cb (".reg2", tdep->sizeof_fpregset, tdep->sizeof_fpregset, &i386_fpregset,
+ NULL, cb_data);
if (tdep->xcr0 & X86_XSTATE_AVX)
- cb (".reg-xstate", X86_XSTATE_SIZE(tdep->xcr0),
- &i386fbsd_xstateregset, "XSAVE extended state", cb_data);
+ cb (".reg-xstate", X86_XSTATE_SIZE (tdep->xcr0),
+ X86_XSTATE_SIZE (tdep->xcr0), &i386fbsd_xstateregset,
+ "XSAVE extended state", cb_data);
}
static void
diff --git a/gdb/i386-linux-tdep.c b/gdb/i386-linux-tdep.c
index f5b039b7944..802c41fe725 100644
--- a/gdb/i386-linux-tdep.c
+++ b/gdb/i386-linux-tdep.c
@@ -764,16 +764,17 @@ i386_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
{
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
- cb (".reg", 68, &i386_gregset, NULL, cb_data);
+ cb (".reg", 68, 68, &i386_gregset, NULL, cb_data);
if (tdep->xcr0 & X86_XSTATE_AVX)
cb (".reg-xstate", X86_XSTATE_SIZE (tdep->xcr0),
- &i386_linux_xstateregset, "XSAVE extended state", cb_data);
+ X86_XSTATE_SIZE (tdep->xcr0), &i386_linux_xstateregset,
+ "XSAVE extended state", cb_data);
else if (tdep->xcr0 & X86_XSTATE_SSE)
- cb (".reg-xfp", 512, &i386_fpregset, "extended floating-point",
+ cb (".reg-xfp", 512, 512, &i386_fpregset, "extended floating-point",
cb_data);
else
- cb (".reg2", 108, &i386_fpregset, NULL, cb_data);
+ cb (".reg2", 108, 108, &i386_fpregset, NULL, cb_data);
}
/* Linux kernel shows PC value after the 'int $0x80' instruction even if
diff --git a/gdb/i386-tdep.c b/gdb/i386-tdep.c
index b1d502f4827..a6994aaf126 100644
--- a/gdb/i386-tdep.c
+++ b/gdb/i386-tdep.c
@@ -3910,9 +3910,11 @@ i386_iterate_over_regset_sections (struct gdbarch *gdbarch,
{
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
- cb (".reg", tdep->sizeof_gregset, &i386_gregset, NULL, cb_data);
+ cb (".reg", tdep->sizeof_gregset, tdep->sizeof_gregset, &i386_gregset, NULL,
+ cb_data);
if (tdep->sizeof_fpregset)
- cb (".reg2", tdep->sizeof_fpregset, tdep->fpregset, NULL, cb_data);
+ cb (".reg2", tdep->sizeof_fpregset, tdep->sizeof_fpregset, tdep->fpregset,
+ NULL, cb_data);
}
diff --git a/gdb/ia64-linux-tdep.c b/gdb/ia64-linux-tdep.c
index 19d0cf2debf..0054f5a5140 100644
--- a/gdb/ia64-linux-tdep.c
+++ b/gdb/ia64-linux-tdep.c
@@ -207,8 +207,10 @@ ia64_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
void *cb_data,
const struct regcache *regcache)
{
- cb (".reg", IA64_LINUX_GREGS_SIZE, &ia64_linux_gregset, NULL, cb_data);
- cb (".reg2", IA64_LINUX_FPREGS_SIZE, &ia64_linux_fpregset, NULL, cb_data);
+ cb (".reg", IA64_LINUX_GREGS_SIZE, IA64_LINUX_GREGS_SIZE, &ia64_linux_gregset,
+ NULL, cb_data);
+ cb (".reg2", IA64_LINUX_FPREGS_SIZE, IA64_LINUX_FPREGS_SIZE,
+ &ia64_linux_fpregset, NULL, cb_data);
}
static void
diff --git a/gdb/linux-tdep.c b/gdb/linux-tdep.c
index 3cfa2a5aa48..5801ab5222f 100644
--- a/gdb/linux-tdep.c
+++ b/gdb/linux-tdep.c
@@ -1579,21 +1579,26 @@ struct linux_collect_regset_section_cb_data
regset in the corefile note section. */
static void
-linux_collect_regset_section_cb (const char *sect_name, int size,
- const struct regset *regset,
+linux_collect_regset_section_cb (const char *sect_name, int supply_size,
+ int collect_size, const struct regset *regset,
const char *human_name, void *cb_data)
{
char *buf;
struct linux_collect_regset_section_cb_data *data
= (struct linux_collect_regset_section_cb_data *) cb_data;
+ bool variable_size_section = (regset != NULL
+ && regset->flags & REGSET_VARIABLE_SIZE);
+
+ if (!variable_size_section)
+ gdb_assert (supply_size == collect_size);
if (data->abort_iteration)
return;
gdb_assert (regset && regset->collect_regset);
- buf = (char *) xmalloc (size);
- regset->collect_regset (regset, data->regcache, -1, buf, size);
+ buf = (char *) xmalloc (collect_size);
+ regset->collect_regset (regset, data->regcache, -1, buf, collect_size);
/* PRSTATUS still needs to be treated specially. */
if (strcmp (sect_name, ".reg") == 0)
@@ -1603,7 +1608,7 @@ linux_collect_regset_section_cb (const char *sect_name, int size,
else
data->note_data = (char *) elfcore_write_register_note
(data->obfd, data->note_data, data->note_size,
- sect_name, buf, size);
+ sect_name, buf, collect_size);
xfree (buf);
if (data->note_data == NULL)
diff --git a/gdb/m32r-linux-tdep.c b/gdb/m32r-linux-tdep.c
index be35b699c21..aa441592a67 100644
--- a/gdb/m32r-linux-tdep.c
+++ b/gdb/m32r-linux-tdep.c
@@ -440,7 +440,8 @@ m32r_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
void *cb_data,
const struct regcache *regcache)
{
- cb (".reg", M32R_LINUX_GREGS_SIZE, &m32r_linux_gregset, NULL, cb_data);
+ cb (".reg", M32R_LINUX_GREGS_SIZE, M32R_LINUX_GREGS_SIZE, &m32r_linux_gregset,
+ NULL, cb_data);
}
static void
diff --git a/gdb/m68k-bsd-tdep.c b/gdb/m68k-bsd-tdep.c
index 2f53870b98d..0991407557d 100644
--- a/gdb/m68k-bsd-tdep.c
+++ b/gdb/m68k-bsd-tdep.c
@@ -123,8 +123,10 @@ m68kbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
void *cb_data,
const struct regcache *regcache)
{
- cb (".reg", M68KBSD_SIZEOF_GREGS, &m68kbsd_gregset, NULL, cb_data);
- cb (".reg2", M68KBSD_SIZEOF_FPREGS, &m68kbsd_fpregset, NULL, cb_data);
+ cb (".reg", M68KBSD_SIZEOF_GREGS, M68KBSD_SIZEOF_GREGS, &m68kbsd_gregset,
+ NULL, cb_data);
+ cb (".reg2", M68KBSD_SIZEOF_FPREGS, M68KBSD_SIZEOF_FPREGS, &m68kbsd_fpregset,
+ NULL, cb_data);
}
diff --git a/gdb/m68k-linux-tdep.c b/gdb/m68k-linux-tdep.c
index 11cde0b09fd..8ebf7913e58 100644
--- a/gdb/m68k-linux-tdep.c
+++ b/gdb/m68k-linux-tdep.c
@@ -374,8 +374,10 @@ m68k_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
void *cb_data,
const struct regcache *regcache)
{
- cb (".reg", M68K_LINUX_GREGS_SIZE, &m68k_linux_gregset, NULL, cb_data);
- cb (".reg2", M68K_LINUX_FPREGS_SIZE, &m68k_linux_fpregset, NULL, cb_data);
+ cb (".reg", M68K_LINUX_GREGS_SIZE, M68K_LINUX_GREGS_SIZE, &m68k_linux_gregset,
+ NULL, cb_data);
+ cb (".reg2", M68K_LINUX_FPREGS_SIZE, M68K_LINUX_FPREGS_SIZE,
+ &m68k_linux_fpregset, NULL, cb_data);
}
static void
diff --git a/gdb/mips-fbsd-tdep.c b/gdb/mips-fbsd-tdep.c
index c3075b23fc1..e3410887022 100644
--- a/gdb/mips-fbsd-tdep.c
+++ b/gdb/mips-fbsd-tdep.c
@@ -245,10 +245,10 @@ mips_fbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
{
size_t regsize = mips_abi_regsize (gdbarch);
- cb (".reg", MIPS_FBSD_NUM_GREGS * regsize, &mips_fbsd_gregset,
- NULL, cb_data);
- cb (".reg2", MIPS_FBSD_NUM_FPREGS * regsize, &mips_fbsd_fpregset,
- NULL, cb_data);
+ cb (".reg", MIPS_FBSD_NUM_GREGS * regsize, MIPS_FBSD_NUM_GREGS * regsize,
+ &mips_fbsd_gregset, NULL, cb_data);
+ cb (".reg2", MIPS_FBSD_NUM_FPREGS * regsize, MIPS_FBSD_NUM_FPREGS * regsize,
+ &mips_fbsd_fpregset, NULL, cb_data);
}
/* Signal trampoline support. */
diff --git a/gdb/mips-linux-tdep.c b/gdb/mips-linux-tdep.c
index 71183d73251..44b2b2e29b7 100644
--- a/gdb/mips-linux-tdep.c
+++ b/gdb/mips-linux-tdep.c
@@ -537,16 +537,18 @@ mips_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
{
if (register_size (gdbarch, MIPS_ZERO_REGNUM) == 4)
{
- cb (".reg", sizeof (mips_elf_gregset_t), &mips_linux_gregset,
- NULL, cb_data);
- cb (".reg2", sizeof (mips64_elf_fpregset_t), &mips64_linux_fpregset,
+ cb (".reg", sizeof (mips_elf_gregset_t), sizeof (mips_elf_gregset_t),
+ &mips_linux_gregset, NULL, cb_data);
+ cb (".reg2", sizeof (mips64_elf_fpregset_t),
+ sizeof (mips64_elf_fpregset_t), &mips64_linux_fpregset,
NULL, cb_data);
}
else
{
- cb (".reg", sizeof (mips64_elf_gregset_t), &mips64_linux_gregset,
- NULL, cb_data);
- cb (".reg2", sizeof (mips64_elf_fpregset_t), &mips64_linux_fpregset,
+ cb (".reg", sizeof (mips64_elf_gregset_t), sizeof (mips64_elf_gregset_t),
+ &mips64_linux_gregset, NULL, cb_data);
+ cb (".reg2", sizeof (mips64_elf_fpregset_t),
+ sizeof (mips64_elf_fpregset_t), &mips64_linux_fpregset,
NULL, cb_data);
}
}
diff --git a/gdb/mips-nbsd-tdep.c b/gdb/mips-nbsd-tdep.c
index 5f4db87498e..5005a176b58 100644
--- a/gdb/mips-nbsd-tdep.c
+++ b/gdb/mips-nbsd-tdep.c
@@ -123,10 +123,10 @@ mipsnbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
{
size_t regsize = mips_isa_regsize (gdbarch);
- cb (".reg", MIPSNBSD_NUM_GREGS * regsize, &mipsnbsd_gregset,
- NULL, cb_data);
- cb (".reg2", MIPSNBSD_NUM_FPREGS * regsize, &mipsnbsd_fpregset,
- NULL, cb_data);
+ cb (".reg", MIPSNBSD_NUM_GREGS * regsize, MIPSNBSD_NUM_GREGS * regsize,
+ &mipsnbsd_gregset, NULL, cb_data);
+ cb (".reg2", MIPSNBSD_NUM_FPREGS * regsize, MIPSNBSD_NUM_FPREGS * regsize,
+ &mipsnbsd_fpregset, NULL, cb_data);
}
diff --git a/gdb/mips64-obsd-tdep.c b/gdb/mips64-obsd-tdep.c
index ab910edfc4c..cbebe053f5c 100644
--- a/gdb/mips64-obsd-tdep.c
+++ b/gdb/mips64-obsd-tdep.c
@@ -72,7 +72,8 @@ mips64obsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
void *cb_data,
const struct regcache *regcache)
{
- cb (".reg", MIPS64OBSD_NUM_REGS * 8, &mips64obsd_gregset, NULL, cb_data);
+ cb (".reg", MIPS64OBSD_NUM_REGS * 8, MIPS64OBSD_NUM_REGS * 8,
+ &mips64obsd_gregset, NULL, cb_data);
}
diff --git a/gdb/mn10300-linux-tdep.c b/gdb/mn10300-linux-tdep.c
index 070fb205fca..76e9c6f15f0 100644
--- a/gdb/mn10300-linux-tdep.c
+++ b/gdb/mn10300-linux-tdep.c
@@ -455,10 +455,10 @@ am33_iterate_over_regset_sections (struct gdbarch *gdbarch,
void *cb_data,
const struct regcache *regcache)
{
- cb (".reg", sizeof (mn10300_elf_gregset_t), &am33_gregset,
- NULL, cb_data);
- cb (".reg2", sizeof(mn10300_elf_fpregset_t), &am33_fpregset,
- NULL, cb_data);
+ cb (".reg", sizeof (mn10300_elf_gregset_t), sizeof (mn10300_elf_gregset_t),
+ &am33_gregset, NULL, cb_data);
+ cb (".reg2", sizeof (mn10300_elf_fpregset_t), sizeof (mn10300_elf_fpregset_t),
+ &am33_fpregset, NULL, cb_data);
}
static void
diff --git a/gdb/nios2-linux-tdep.c b/gdb/nios2-linux-tdep.c
index e7f4ecf16e2..d7e97abf09a 100644
--- a/gdb/nios2-linux-tdep.c
+++ b/gdb/nios2-linux-tdep.c
@@ -106,7 +106,8 @@ nios2_iterate_over_regset_sections (struct gdbarch *gdbarch,
void *cb_data,
const struct regcache *regcache)
{
- cb (".reg", NIOS2_GREGS_SIZE, &nios2_core_regset, NULL, cb_data);
+ cb (".reg", NIOS2_GREGS_SIZE, NIOS2_GREGS_SIZE, &nios2_core_regset, NULL,
+ cb_data);
}
/* Initialize a trad-frame cache corresponding to the tramp-frame.
diff --git a/gdb/ppc-fbsd-tdep.c b/gdb/ppc-fbsd-tdep.c
index 495ccca8f18..e709c36d585 100644
--- a/gdb/ppc-fbsd-tdep.c
+++ b/gdb/ppc-fbsd-tdep.c
@@ -128,10 +128,10 @@ ppcfbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
if (tdep->wordsize == 4)
- cb (".reg", 148, &ppc32_fbsd_gregset, NULL, cb_data);
+ cb (".reg", 148, 148, &ppc32_fbsd_gregset, NULL, cb_data);
else
- cb (".reg", 296, &ppc64_fbsd_gregset, NULL, cb_data);
- cb (".reg2", 264, &ppc32_fbsd_fpregset, NULL, cb_data);
+ cb (".reg", 296, 296, &ppc64_fbsd_gregset, NULL, cb_data);
+ cb (".reg2", 264, 264, &ppc32_fbsd_fpregset, NULL, cb_data);
}
/* Default page size. */
diff --git a/gdb/ppc-linux-tdep.c b/gdb/ppc-linux-tdep.c
index 33a0b5a83b6..1c0fb7a7413 100644
--- a/gdb/ppc-linux-tdep.c
+++ b/gdb/ppc-linux-tdep.c
@@ -605,21 +605,21 @@ ppc_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
int have_vsx = tdep->ppc_vsr0_upper_regnum != -1;
if (tdep->wordsize == 4)
- cb (".reg", 48 * 4, &ppc32_linux_gregset, NULL, cb_data);
+ cb (".reg", 48 * 4, 48 * 4, &ppc32_linux_gregset, NULL, cb_data);
else
- cb (".reg", 48 * 8, &ppc64_linux_gregset, NULL, cb_data);
+ cb (".reg", 48 * 8, 48 * 8, &ppc64_linux_gregset, NULL, cb_data);
- cb (".reg2", 264, &ppc32_linux_fpregset, NULL, cb_data);
+ cb (".reg2", 264, 264, &ppc32_linux_fpregset, NULL, cb_data);
if (have_altivec)
{
const struct regset *vrregset = ppc_linux_vrregset (gdbarch);
- cb (".reg-ppc-vmx", PPC_LINUX_SIZEOF_VRREGSET, vrregset,
- "ppc Altivec", cb_data);
+ cb (".reg-ppc-vmx", PPC_LINUX_SIZEOF_VRREGSET, PPC_LINUX_SIZEOF_VRREGSET,
+ vrregset, "ppc Altivec", cb_data);
}
if (have_vsx)
- cb (".reg-ppc-vsx", PPC_LINUX_SIZEOF_VSXREGSET,
+ cb (".reg-ppc-vsx", PPC_LINUX_SIZEOF_VSXREGSET, PPC_LINUX_SIZEOF_VSXREGSET,
&ppc32_linux_vsxregset, "POWER7 VSX", cb_data);
}
diff --git a/gdb/ppc-nbsd-tdep.c b/gdb/ppc-nbsd-tdep.c
index c86aeb8a295..053ec49e6e8 100644
--- a/gdb/ppc-nbsd-tdep.c
+++ b/gdb/ppc-nbsd-tdep.c
@@ -59,8 +59,8 @@ ppcnbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
void *cb_data,
const struct regcache *regcache)
{
- cb (".reg", 148, &ppcnbsd_gregset, NULL, cb_data);
- cb (".reg2", 264, &ppcnbsd_fpregset, NULL, cb_data);
+ cb (".reg", 148, 148, &ppcnbsd_gregset, NULL, cb_data);
+ cb (".reg2", 264, 264, &ppcnbsd_fpregset, NULL, cb_data);
}
diff --git a/gdb/ppc-obsd-tdep.c b/gdb/ppc-obsd-tdep.c
index 838783111a2..c478324d385 100644
--- a/gdb/ppc-obsd-tdep.c
+++ b/gdb/ppc-obsd-tdep.c
@@ -88,7 +88,7 @@ ppcobsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
void *cb_data,
const struct regcache *regcache)
{
- cb (".reg", 412, &ppcobsd_gregset, NULL, cb_data);
+ cb (".reg", 412, 412, &ppcobsd_gregset, NULL, cb_data);
}
diff --git a/gdb/riscv-linux-tdep.c b/gdb/riscv-linux-tdep.c
index 47c2ab6d4f4..d072c0b754f 100644
--- a/gdb/riscv-linux-tdep.c
+++ b/gdb/riscv-linux-tdep.c
@@ -50,7 +50,7 @@ riscv_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
void *cb_data,
const struct regcache *regcache)
{
- cb (".reg", (32 * riscv_isa_xlen (gdbarch)),
+ cb (".reg", (32 * riscv_isa_xlen (gdbarch)), (32 * riscv_isa_xlen (gdbarch)),
&riscv_linux_gregset, NULL, cb_data);
/* TODO: Add FP register support. */
diff --git a/gdb/rs6000-aix-tdep.c b/gdb/rs6000-aix-tdep.c
index 8e69c465fa7..50a146a4f0e 100644
--- a/gdb/rs6000-aix-tdep.c
+++ b/gdb/rs6000-aix-tdep.c
@@ -146,9 +146,9 @@ rs6000_aix_iterate_over_regset_sections (struct gdbarch *gdbarch,
const struct regcache *regcache)
{
if (gdbarch_tdep (gdbarch)->wordsize == 4)
- cb (".reg", 592, &rs6000_aix32_regset, NULL, cb_data);
+ cb (".reg", 592, 592, &rs6000_aix32_regset, NULL, cb_data);
else
- cb (".reg", 576, &rs6000_aix64_regset, NULL, cb_data);
+ cb (".reg", 576, 576, &rs6000_aix64_regset, NULL, cb_data);
}
diff --git a/gdb/s390-linux-tdep.c b/gdb/s390-linux-tdep.c
index 4561559a855..ee8fb011094 100644
--- a/gdb/s390-linux-tdep.c
+++ b/gdb/s390-linux-tdep.c
@@ -273,21 +273,22 @@ s390_iterate_over_regset_sections (struct gdbarch *gdbarch,
const int gregset_size = (tdep->abi == ABI_LINUX_S390 ?
s390_sizeof_gregset : s390x_sizeof_gregset);
- cb (".reg", gregset_size, &s390_gregset, NULL, cb_data);
- cb (".reg2", s390_sizeof_fpregset, &s390_fpregset, NULL, cb_data);
+ cb (".reg", gregset_size, gregset_size, &s390_gregset, NULL, cb_data);
+ cb (".reg2", s390_sizeof_fpregset, s390_sizeof_fpregset, &s390_fpregset, NULL,
+ cb_data);
if (tdep->abi == ABI_LINUX_S390 && tdep->gpr_full_regnum != -1)
- cb (".reg-s390-high-gprs", 16 * 4, &s390_upper_regset,
+ cb (".reg-s390-high-gprs", 16 * 4, 16 * 4, &s390_upper_regset,
"s390 GPR upper halves", cb_data);
if (tdep->have_linux_v1)
- cb (".reg-s390-last-break", 8,
+ cb (".reg-s390-last-break", 8, 8,
(gdbarch_ptr_bit (gdbarch) == 32
? &s390_last_break_regset : &s390x_last_break_regset),
"s390 last-break address", cb_data);
if (tdep->have_linux_v2)
- cb (".reg-s390-system-call", 4, &s390_system_call_regset,
+ cb (".reg-s390-system-call", 4, 4, &s390_system_call_regset,
"s390 system-call", cb_data);
/* If regcache is set, we are in "write" (gcore) mode. In this
@@ -297,14 +298,14 @@ s390_iterate_over_regset_sections (struct gdbarch *gdbarch,
&& (regcache == NULL
|| (REG_VALID
== regcache->get_register_status (S390_TDB_DWORD0_REGNUM))))
- cb (".reg-s390-tdb", s390_sizeof_tdbregset, &s390_tdb_regset,
- "s390 TDB", cb_data);
+ cb (".reg-s390-tdb", s390_sizeof_tdbregset, s390_sizeof_tdbregset,
+ &s390_tdb_regset, "s390 TDB", cb_data);
if (tdep->v0_full_regnum != -1)
{
- cb (".reg-s390-vxrs-low", 16 * 8, &s390_vxrs_low_regset,
+ cb (".reg-s390-vxrs-low", 16 * 8, 16 * 8, &s390_vxrs_low_regset,
"s390 vector registers 0-15 lower half", cb_data);
- cb (".reg-s390-vxrs-high", 16 * 16, &s390_vxrs_high_regset,
+ cb (".reg-s390-vxrs-high", 16 * 16, 16 * 16, &s390_vxrs_high_regset,
"s390 vector registers 16-31", cb_data);
}
@@ -314,12 +315,12 @@ s390_iterate_over_regset_sections (struct gdbarch *gdbarch,
{
if (regcache == NULL
|| REG_VALID == regcache->get_register_status (S390_GSD_REGNUM))
- cb (".reg-s390-gs-cb", 4 * 8, &s390_gs_regset,
+ cb (".reg-s390-gs-cb", 4 * 8, 4 * 8, &s390_gs_regset,
"s390 guarded-storage registers", cb_data);
if (regcache == NULL
|| REG_VALID == regcache->get_register_status (S390_BC_GSD_REGNUM))
- cb (".reg-s390-gs-bc", 4 * 8, &s390_gsbc_regset,
+ cb (".reg-s390-gs-bc", 4 * 8, 4 * 8, &s390_gsbc_regset,
"s390 guarded-storage broadcast control", cb_data);
}
}
diff --git a/gdb/score-tdep.c b/gdb/score-tdep.c
index 16bf00ea024..b2887c5eae7 100644
--- a/gdb/score-tdep.c
+++ b/gdb/score-tdep.c
@@ -1447,8 +1447,8 @@ score7_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
void *cb_data,
const struct regcache *regcache)
{
- cb (".reg", SCORE7_LINUX_SIZEOF_GREGSET, &score7_linux_gregset,
- NULL, cb_data);
+ cb (".reg", SCORE7_LINUX_SIZEOF_GREGSET, SCORE7_LINUX_SIZEOF_GREGSET,
+ &score7_linux_gregset, NULL, cb_data);
}
static struct gdbarch *
diff --git a/gdb/sh-tdep.c b/gdb/sh-tdep.c
index d1a143414df..fe64cf979a0 100644
--- a/gdb/sh-tdep.c
+++ b/gdb/sh-tdep.c
@@ -2232,10 +2232,12 @@ sh_iterate_over_regset_sections (struct gdbarch *gdbarch,
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
if (tdep->core_gregmap != NULL)
- cb (".reg", tdep->sizeof_gregset, &sh_corefile_gregset, NULL, cb_data);
+ cb (".reg", tdep->sizeof_gregset, tdep->sizeof_gregset,
+ &sh_corefile_gregset, NULL, cb_data);
if (tdep->core_fpregmap != NULL)
- cb (".reg2", tdep->sizeof_fpregset, &sh_corefile_fpregset, NULL, cb_data);
+ cb (".reg2", tdep->sizeof_fpregset, tdep->sizeof_fpregset,
+ &sh_corefile_fpregset, NULL, cb_data);
}
/* This is the implementation of gdbarch method
diff --git a/gdb/sparc-tdep.c b/gdb/sparc-tdep.c
index c638a6d20c4..7a50a8d4a97 100644
--- a/gdb/sparc-tdep.c
+++ b/gdb/sparc-tdep.c
@@ -1777,8 +1777,10 @@ sparc_iterate_over_regset_sections (struct gdbarch *gdbarch,
{
struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
- cb (".reg", tdep->sizeof_gregset, tdep->gregset, NULL, cb_data);
- cb (".reg2", tdep->sizeof_fpregset, tdep->fpregset, NULL, cb_data);
+ cb (".reg", tdep->sizeof_gregset, tdep->sizeof_gregset, tdep->gregset, NULL,
+ cb_data);
+ cb (".reg2", tdep->sizeof_fpregset, tdep->sizeof_fpregset, tdep->fpregset,
+ NULL, cb_data);
}
diff --git a/gdb/tilegx-linux-tdep.c b/gdb/tilegx-linux-tdep.c
index d5280f3e17b..c44bbd15f3e 100644
--- a/gdb/tilegx-linux-tdep.c
+++ b/gdb/tilegx-linux-tdep.c
@@ -99,8 +99,8 @@ tilegx_iterate_over_regset_sections (struct gdbarch *gdbarch,
void *cb_data,
const struct regcache *regcache)
{
- cb (".reg", TILEGX_LINUX_SIZEOF_GREGSET, &tilegx_linux_regset,
- NULL, cb_data);
+ cb (".reg", TILEGX_LINUX_SIZEOF_GREGSET, TILEGX_LINUX_SIZEOF_GREGSET,
+ &tilegx_linux_regset, NULL, cb_data);
}
/* OS specific initialization of gdbarch. */
diff --git a/gdb/vax-tdep.c b/gdb/vax-tdep.c
index d07a4779076..21f2066da28 100644
--- a/gdb/vax-tdep.c
+++ b/gdb/vax-tdep.c
@@ -96,7 +96,7 @@ vax_iterate_over_regset_sections (struct gdbarch *gdbarch,
void *cb_data,
const struct regcache *regcache)
{
- cb (".reg", VAX_NUM_REGS * 4, &vax_gregset, NULL, cb_data);
+ cb (".reg", VAX_NUM_REGS * 4, VAX_NUM_REGS * 4, &vax_gregset, NULL, cb_data);
}
/* The VAX UNIX calling convention uses R1 to pass a structure return
diff --git a/gdb/xtensa-tdep.c b/gdb/xtensa-tdep.c
index 7c0d8c15a75..49a7f023e7d 100644
--- a/gdb/xtensa-tdep.c
+++ b/gdb/xtensa-tdep.c
@@ -902,8 +902,8 @@ xtensa_iterate_over_regset_sections (struct gdbarch *gdbarch,
{
DEBUGTRACE ("xtensa_iterate_over_regset_sections\n");
- cb (".reg", sizeof (xtensa_elf_gregset_t), &xtensa_gregset,
- NULL, cb_data);
+ cb (".reg", sizeof (xtensa_elf_gregset_t), sizeof (xtensa_elf_gregset_t),
+ &xtensa_gregset, NULL, cb_data);
}