diff options
author | Simon Marchi <simon.marchi@ericsson.com> | 2018-07-31 10:06:00 -0400 |
---|---|---|
committer | Simon Marchi <simon.marchi@ericsson.com> | 2018-07-31 10:06:00 -0400 |
commit | 1c28969efcca7c214e41c496f599bc4de2c56dbe (patch) | |
tree | 9c9e936f78bd753835d67b3bd1b4ded178665754 /gdb/target-descriptions.c | |
parent | 1424ad867742286be44932bf29720539add19ae0 (diff) | |
download | gdb-1c28969efcca7c214e41c496f599bc4de2c56dbe.zip gdb-1c28969efcca7c214e41c496f599bc4de2c56dbe.tar.gz gdb-1c28969efcca7c214e41c496f599bc4de2c56dbe.tar.bz2 |
Delete test target descriptions when exiting
Looking at the address sanitizer output, this was a quite low hanging
fruit. We create target_desc objects for testing that we never free.
Saving them in unique_ptrs takes care of it.
I created a small struct to hold these because I thought it would help
readability.
gdb/ChangeLog:
* target-descriptions.c (struct xml_test_tdesc): New.
(xml_tdesc): Change type to std::vector<xml_test_tdesc>.
(record_xml_tdesc): Update.
(maintenance_check_xml_descriptions): Update.
* target-descriptions.h (record_xml_tdesc): Update comment.
Diffstat (limited to 'gdb/target-descriptions.c')
-rw-r--r-- | gdb/target-descriptions.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/gdb/target-descriptions.c b/gdb/target-descriptions.c index a96416c..087de14 100644 --- a/gdb/target-descriptions.c +++ b/gdb/target-descriptions.c @@ -1734,7 +1734,19 @@ maint_print_c_tdesc_cmd (const char *args, int from_tty) namespace selftests { -static std::vector<std::pair<const char*, const target_desc *>> xml_tdesc; +/* A reference target description, used for testing (see record_xml_tdesc). */ + +struct xml_test_tdesc +{ + xml_test_tdesc (const char *name, std::unique_ptr<const target_desc> &&tdesc) + : name (name), tdesc (std::move (tdesc)) + {} + + const char *name; + std::unique_ptr<const target_desc> tdesc; +}; + +static std::vector<xml_test_tdesc> xml_tdesc; #if GDB_SELF_TEST @@ -1743,7 +1755,7 @@ static std::vector<std::pair<const char*, const target_desc *>> xml_tdesc; void record_xml_tdesc (const char *xml_file, const struct target_desc *tdesc) { - xml_tdesc.emplace_back (xml_file, tdesc); + xml_tdesc.emplace_back (xml_file, std::unique_ptr<const target_desc> (tdesc)); } #endif @@ -1798,17 +1810,17 @@ maintenance_check_xml_descriptions (const char *dir, int from_tty) for (auto const &e : selftests::xml_tdesc) { - std::string tdesc_xml = (feature_dir + SLASH_STRING + e.first); + std::string tdesc_xml = (feature_dir + SLASH_STRING + e.name); const target_desc *tdesc = file_read_description_xml (tdesc_xml.data ()); - if (tdesc == NULL || *tdesc != *e.second) + if (tdesc == NULL || *tdesc != *e.tdesc) { - printf_filtered ( _("Descriptions for %s do not match.\n"), e.first); + printf_filtered ( _("Descriptions for %s do not match.\n"), e.name); failed++; } - else if (!maintenance_check_tdesc_xml_convert (tdesc, e.first) - || !maintenance_check_tdesc_xml_convert (e.second, e.first)) + else if (!maintenance_check_tdesc_xml_convert (tdesc, e.name) + || !maintenance_check_tdesc_xml_convert (e.tdesc.get (), e.name)) failed++; } printf_filtered (_("Tested %lu XML files, %d failed\n"), |