From: Pedro Franco de Carvalho Date: Fri, 26 Oct 2018 12:37:53 +0000 (-0300) Subject: Zero-initialize linux note sections X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=afde3032dde478a2bbb2e0c4b0cb4256b27eb949;p=binutils-gdb.git 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 * linux-tdep.c (linux_collect_regset_section_cb): Use std::vector instead of char * and malloc for buf. Remove xfree. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 694651bc44a..411f43f30dc 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2018-10-26 Pedro Franco de Carvalho + + * linux-tdep.c (linux_collect_regset_section_cb): Use + std::vector instead of char * and malloc for buf. + Remove xfree. + 2018-10-26 Sangamesh Mallayya * xcoffread.c (read_xcoff_symtab): Pass deduced language to diff --git a/gdb/linux-tdep.c b/gdb/linux-tdep.c index 352114943fe..c958c0dfe9d 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 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;