public inbox for gdb-cvs@sourceware.org help / color / mirror / Atom feed
From: Tom Tromey <tromey@sourceware.org> To: gdb-cvs@sourceware.org Subject: [binutils-gdb] Change allocation of m_dwarf2_cus Date: Wed, 8 Jun 2022 17:11:38 +0000 (GMT) [thread overview] Message-ID: <20220608171138.AED5D386CE43@sourceware.org> (raw) https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=d09ee622ee7fb4f64e9456c600874070ca21debf commit d09ee622ee7fb4f64e9456c600874070ca21debf Author: Tom Tromey <tom@tromey.com> Date: Tue Jun 7 18:00:59 2022 -0600 Change allocation of m_dwarf2_cus m_dwarf2_cus manually manages the 'dwarf2_cu' pointers it owns. This patch simplifies the code by changing it to use unique_ptr. Diff: --- gdb/dwarf2/read.c | 23 +++++++++-------------- gdb/dwarf2/read.h | 6 ++++-- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index 848fd5627b8..d279e729db9 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -1476,9 +1476,6 @@ dwarf2_per_objfile::remove_all_cus () { gdb_assert (!this->per_bfd->queue.has_value ()); - for (auto pair : m_dwarf2_cus) - delete pair.second; - m_dwarf2_cus.clear (); } @@ -6350,7 +6347,7 @@ cutu_reader::keep () /* Save this dwarf2_cu in the per_objfile. The per_objfile owns it now. */ dwarf2_per_objfile *per_objfile = m_new_cu->per_objfile; - per_objfile->set_cu (m_this_cu, m_new_cu.release ()); + per_objfile->set_cu (m_this_cu, std::move (m_new_cu)); } } @@ -23535,17 +23532,18 @@ dwarf2_per_objfile::get_cu (dwarf2_per_cu_data *per_cu) if (it == m_dwarf2_cus.end ()) return nullptr; - return it->second; + return it->second.get (); } /* See read.h. */ void -dwarf2_per_objfile::set_cu (dwarf2_per_cu_data *per_cu, dwarf2_cu *cu) +dwarf2_per_objfile::set_cu (dwarf2_per_cu_data *per_cu, + std::unique_ptr<dwarf2_cu> cu) { gdb_assert (this->get_cu (per_cu) == nullptr); - m_dwarf2_cus[per_cu] = cu; + m_dwarf2_cus[per_cu] = std::move (cu); } /* See read.h. */ @@ -23563,14 +23561,14 @@ dwarf2_per_objfile::age_comp_units () gdb_assert (!this->per_bfd->queue.has_value ()); /* Start by clearing all marks. */ - for (auto pair : m_dwarf2_cus) + for (const auto &pair : m_dwarf2_cus) pair.second->clear_mark (); /* Traverse all CUs, mark them and their dependencies if used recently enough. */ - for (auto pair : m_dwarf2_cus) + for (const auto &pair : m_dwarf2_cus) { - dwarf2_cu *cu = pair.second; + dwarf2_cu *cu = pair.second.get (); cu->last_used++; if (cu->last_used <= dwarf_max_cache_age) @@ -23580,13 +23578,12 @@ dwarf2_per_objfile::age_comp_units () /* Delete all CUs still not marked. */ for (auto it = m_dwarf2_cus.begin (); it != m_dwarf2_cus.end ();) { - dwarf2_cu *cu = it->second; + dwarf2_cu *cu = it->second.get (); if (!cu->is_marked ()) { dwarf_read_debug_printf_v ("deleting old CU %s", sect_offset_str (cu->per_cu->sect_off)); - delete cu; it = m_dwarf2_cus.erase (it); } else @@ -23603,8 +23600,6 @@ dwarf2_per_objfile::remove_cu (dwarf2_per_cu_data *per_cu) if (it == m_dwarf2_cus.end ()) return; - delete it->second; - m_dwarf2_cus.erase (it); } diff --git a/gdb/dwarf2/read.h b/gdb/dwarf2/read.h index b58c574c2be..75dd38c0b73 100644 --- a/gdb/dwarf2/read.h +++ b/gdb/dwarf2/read.h @@ -28,6 +28,7 @@ #include "dwarf2/index-cache.h" #include "dwarf2/mapped-index.h" #include "dwarf2/section.h" +#include "dwarf2/cu.h" #include "filename-seen-cache.h" #include "gdbsupport/gdb_obstack.h" #include "gdbsupport/hash_enum.h" @@ -547,7 +548,7 @@ struct dwarf2_per_objfile dwarf2_cu *get_cu (dwarf2_per_cu_data *per_cu); /* Set the dwarf2_cu matching PER_CU for this objfile. */ - void set_cu (dwarf2_per_cu_data *per_cu, dwarf2_cu *cu); + void set_cu (dwarf2_per_cu_data *per_cu, std::unique_ptr<dwarf2_cu> cu); /* Remove/free the dwarf2_cu matching PER_CU for this objfile. */ void remove_cu (dwarf2_per_cu_data *per_cu); @@ -596,7 +597,8 @@ private: /* Map from the objfile-independent dwarf2_per_cu_data instances to the corresponding objfile-dependent dwarf2_cu instances. */ - std::unordered_map<dwarf2_per_cu_data *, dwarf2_cu *> m_dwarf2_cus; + std::unordered_map<dwarf2_per_cu_data *, + std::unique_ptr<dwarf2_cu>> m_dwarf2_cus; }; /* Get the dwarf2_per_objfile associated to OBJFILE. */
reply other threads:[~2022-06-08 17:11 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20220608171138.AED5D386CE43@sourceware.org \ --to=tromey@sourceware.org \ --cc=gdb-cvs@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).