aboutsummaryrefslogtreecommitdiff
path: root/gdb/linux-tdep.c
diff options
context:
space:
mode:
authorPedro Franco de Carvalho <pedromfc@linux.ibm.com>2018-10-26 09:37:53 -0300
committerPedro Franco de Carvalho <pedromfc@linux.ibm.com>2018-10-26 09:41:20 -0300
commitafde3032dde478a2bbb2e0c4b0cb4256b27eb949 (patch)
tree82722bc0bbdba33634a51e4d76d1e61c51662108 /gdb/linux-tdep.c
parentb971899198607b844f5a37e39dc561766c3b331a (diff)
downloadgdb-afde3032dde478a2bbb2e0c4b0cb4256b27eb949.zip
gdb-afde3032dde478a2bbb2e0c4b0cb4256b27eb949.tar.gz
gdb-afde3032dde478a2bbb2e0c4b0cb4256b27eb949.tar.bz2
Zero-initialize linux note sections
This patches changes linux-tdep.c so that the buffer used to write note sections when generating a core file is zero-initialized. This way, bytes that are not collected won't contain random data (e.g. padding bytes). gdb/ChangeLog: 2018-10-26 Pedro Franco de Carvalho <pedromfc@linux.ibm.com> * linux-tdep.c (linux_collect_regset_section_cb): Use std::vector<gdb_byte> instead of char * and malloc for buf. Remove xfree.
Diffstat (limited to 'gdb/linux-tdep.c')
-rw-r--r--gdb/linux-tdep.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/gdb/linux-tdep.c b/gdb/linux-tdep.c
index 3521149..c958c0d 100644
--- a/gdb/linux-tdep.c
+++ b/gdb/linux-tdep.c
@@ -1584,7 +1584,6 @@ 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
@@ -1598,19 +1597,22 @@ linux_collect_regset_section_cb (const char *sect_name, int supply_size,
gdb_assert (regset && regset->collect_regset);
- buf = (char *) xmalloc (collect_size);
- regset->collect_regset (regset, data->regcache, -1, buf, collect_size);
+ /* This is intentionally zero-initialized by using std::vector, so
+ that any padding bytes in the core file will show as 0. */
+ std::vector<gdb_byte> buf (collect_size);
+
+ regset->collect_regset (regset, data->regcache, -1, buf.data (),
+ collect_size);
/* PRSTATUS still needs to be treated specially. */
if (strcmp (sect_name, ".reg") == 0)
data->note_data = (char *) elfcore_write_prstatus
(data->obfd, data->note_data, data->note_size, data->lwp,
- gdb_signal_to_host (data->stop_signal), buf);
+ gdb_signal_to_host (data->stop_signal), buf.data ());
else
data->note_data = (char *) elfcore_write_register_note
(data->obfd, data->note_data, data->note_size,
- sect_name, buf, collect_size);
- xfree (buf);
+ sect_name, buf.data (), collect_size);
if (data->note_data == NULL)
data->abort_iteration = 1;