diff options
author | Pedro Franco de Carvalho <pedromfc@linux.ibm.com> | 2018-10-26 09:37:53 -0300 |
---|---|---|
committer | Pedro Franco de Carvalho <pedromfc@linux.ibm.com> | 2018-10-26 09:41:20 -0300 |
commit | afde3032dde478a2bbb2e0c4b0cb4256b27eb949 (patch) | |
tree | 82722bc0bbdba33634a51e4d76d1e61c51662108 /gdb/linux-tdep.c | |
parent | b971899198607b844f5a37e39dc561766c3b331a (diff) | |
download | gdb-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.c | 14 |
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; |