aboutsummaryrefslogtreecommitdiff
path: root/gdb/xml-tdesc.c
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2019-01-02 08:03:13 -0700
committerTom Tromey <tom@tromey.com>2019-01-02 16:40:11 -0700
commitc55d06ec95961fadd9deeffae519ff0f20f237d3 (patch)
treed29af475537221052acb1202b40769ddf1491a9a /gdb/xml-tdesc.c
parent3a6ae42d4e4ecfd2441cf9b978b2a54ad6767cb7 (diff)
downloadfsf-binutils-gdb-c55d06ec95961fadd9deeffae519ff0f20f237d3.zip
fsf-binutils-gdb-c55d06ec95961fadd9deeffae519ff0f20f237d3.tar.gz
fsf-binutils-gdb-c55d06ec95961fadd9deeffae519ff0f20f237d3.tar.bz2
Remove a cleanup from target-descriptions.c
This removes a cleanup from target-descriptions.c, by changing it to use a unique_ptr instead. Note that a deletion adapter is used, even though target_desc is allocated with new, to avoid moving target_desc to target-descriptions.h. gdb/ChangeLog 2019-01-02 Tom Tromey <tom@tromey.com> * xml-tdesc.c (xml_cache): Hold a target_desc_up. (tdesc_parse_xml): Remove cleanups. * target-descriptions.h (make_cleanup_free_target_description): Don't declare. (target_desc_deleter): New struct. (target_desc_up): New typedef. * target-descriptions.c (target_desc_deleter::operator()): Rename from free_target_description. (make_cleanup_free_target_description): Remove.
Diffstat (limited to 'gdb/xml-tdesc.c')
-rw-r--r--gdb/xml-tdesc.c13
1 files changed, 5 insertions, 8 deletions
diff --git a/gdb/xml-tdesc.c b/gdb/xml-tdesc.c
index 601ffe6..7588cb0 100644
--- a/gdb/xml-tdesc.c
+++ b/gdb/xml-tdesc.c
@@ -66,7 +66,7 @@ tdesc_parse_xml (const char *document, xml_fetch_another fetcher,
then we will create unnecessary duplicate gdbarches. See
gdbarch_list_lookup_by_info. */
-static std::unordered_map<std::string, target_desc *> xml_cache;
+static std::unordered_map<std::string, target_desc_up> xml_cache;
/* Callback data for target description parsing. */
@@ -637,25 +637,22 @@ tdesc_parse_xml (const char *document, xml_fetch_another fetcher,
previously parsed. */
const auto it = xml_cache.find (expanded_text);
if (it != xml_cache.end ())
- return it->second;
+ return it->second.get ();
memset (&data, 0, sizeof (struct tdesc_parsing_data));
- data.tdesc = allocate_target_description ();
- struct cleanup *result_cleanup
- = make_cleanup_free_target_description (data.tdesc);
+ target_desc_up description (allocate_target_description ());
+ data.tdesc = description.get ();
if (gdb_xml_parse_quick (_("target description"), "gdb-target.dtd",
tdesc_elements, expanded_text.c_str (), &data) == 0)
{
/* Parsed successfully. */
- xml_cache.emplace (std::move (expanded_text), data.tdesc);
- discard_cleanups (result_cleanup);
+ xml_cache.emplace (std::move (expanded_text), std::move (description));
return data.tdesc;
}
else
{
warning (_("Could not load XML target description; ignoring"));
- do_cleanups (result_cleanup);
return NULL;
}
}