public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Tom Tromey <tom@tromey.com>
To: gdb-patches@sourceware.org
Subject: [PATCH 09/26] Move psymbol_map out of objfile
Date: Sun, 28 Feb 2021 13:37:46 -0700	[thread overview]
Message-ID: <20210228203803.1693413-10-tom@tromey.com> (raw)
In-Reply-To: <20210228203803.1693413-1-tom@tromey.com>

objfile::psymbol_map is used to implement a Rust feature.  It is
currently specific to partial symbols -- it isn't used by the DWARF
indices.

This patch moves it out of objfile and into psymbol_functions, adding
a new method to quick_symbol_functions to handle the clearing case.
This is needed because the map holds unrelocated addresses.

gdb/ChangeLog
2021-02-28  Tom Tromey  <tom@tromey.com>

	* quick-symbol.h (struct quick_symbol_functions)
	<relocated>: New method.
	* psymtab.h (struct psymbol_functions) <relocated>: New
	method.
	<fill_psymbol_map>: Declare method.
	<m_psymbol_map>: New member.
	* psymtab.c (psymbol_functions::fill_psymbol_map): Rename.
	(psymbol_functions::find_compunit_symtab_by_address): Update.
	* objfiles.h (reset_psymtabs): Don't clear psymbol_map.
	(struct objfile) <psymbol_map>: Remove.
	* objfiles.c (objfile_relocate1): Update.
---
 gdb/ChangeLog      | 14 ++++++++++++++
 gdb/objfiles.c     |  6 +++---
 gdb/objfiles.h     |  6 ------
 gdb/psympriv.h     | 17 +++++++++++++++++
 gdb/psymtab.c      | 37 +++++++++++++++++++------------------
 gdb/quick-symbol.h |  7 +++++++
 6 files changed, 60 insertions(+), 27 deletions(-)

diff --git a/gdb/objfiles.c b/gdb/objfiles.c
index f18f6158fc3..bfa5f0443e3 100644
--- a/gdb/objfiles.c
+++ b/gdb/objfiles.c
@@ -703,9 +703,9 @@ objfile_relocate1 (struct objfile *objfile,
       }
   }
 
-  /* This stores relocated addresses and so must be cleared.  This
-     will cause it to be recreated on demand.  */
-  objfile->psymbol_map.clear ();
+  /* Notify the quick symbol object.  */
+  if (objfile->qf)
+    objfile->qf->relocated ();
 
   /* Relocate isolated symbols.  */
   {
diff --git a/gdb/objfiles.h b/gdb/objfiles.h
index 7235713cbdf..cd136eef788 100644
--- a/gdb/objfiles.h
+++ b/gdb/objfiles.h
@@ -459,7 +459,6 @@ struct objfile
 
   void reset_psymtabs ()
   {
-    psymbol_map.clear ();
     partial_symtabs.reset (new psymtab_storage ());
   }
 
@@ -665,11 +664,6 @@ struct objfile
 
   struct obstack objfile_obstack {};
 
-  /* Map symbol addresses to the partial symtab that defines the
-     object at that address.  */
-
-  std::vector<std::pair<CORE_ADDR, partial_symtab *>> psymbol_map;
-
   /* Structure which keeps track of functions that manipulate objfile's
      of the same type as this objfile.  I.e. the function to read partial
      symbols for example.  Note that this structure is in statically
diff --git a/gdb/psympriv.h b/gdb/psympriv.h
index 6b9ee184e9c..73f00a50992 100644
--- a/gdb/psympriv.h
+++ b/gdb/psympriv.h
@@ -535,6 +535,23 @@ struct psymbol_functions : public quick_symbol_functions
   void map_symbol_filenames (struct objfile *objfile,
 			     symbol_filename_ftype *fun, void *data,
 			     int need_fullname) override;
+
+  void relocated () override
+  {
+    m_psymbol_map.clear ();
+  }
+
+private:
+
+  void fill_psymbol_map (struct objfile *objfile,
+			 struct partial_symtab *psymtab,
+			 std::set<CORE_ADDR> *seen_addrs,
+			 const std::vector<partial_symbol *> &symbols);
+
+  /* Map symbol addresses to the partial symtab that defines the
+     object at that address.  */
+
+  std::vector<std::pair<CORE_ADDR, partial_symtab *>> m_psymbol_map;
 };
 
 #endif /* PSYMPRIV_H */
diff --git a/gdb/psymtab.c b/gdb/psymtab.c
index c022daa7894..45a4db71c1f 100644
--- a/gdb/psymtab.c
+++ b/gdb/psymtab.c
@@ -1346,13 +1346,14 @@ psymbol_functions::has_symbols (struct objfile *objfile)
 }
 
 /* Helper function for psym_find_compunit_symtab_by_address that fills
-   in psymbol_map for a given range of psymbols.  */
+   in m_psymbol_map for a given range of psymbols.  */
 
-static void
-psym_fill_psymbol_map (struct objfile *objfile,
-		       struct partial_symtab *psymtab,
-		       std::set<CORE_ADDR> *seen_addrs,
-		       const std::vector<partial_symbol *> &symbols)
+void
+psymbol_functions::fill_psymbol_map
+     (struct objfile *objfile,
+      struct partial_symtab *psymtab,
+      std::set<CORE_ADDR> *seen_addrs,
+      const std::vector<partial_symbol *> &symbols)
 {
   for (partial_symbol *psym : symbols)
     {
@@ -1362,7 +1363,7 @@ psym_fill_psymbol_map (struct objfile *objfile,
 	  if (seen_addrs->find (addr) == seen_addrs->end ())
 	    {
 	      seen_addrs->insert (addr);
-	      objfile->psymbol_map.emplace_back (addr, psymtab);
+	      m_psymbol_map.emplace_back (addr, psymtab);
 	    }
 	}
     }
@@ -1375,23 +1376,23 @@ compunit_symtab *
 psymbol_functions::find_compunit_symtab_by_address (struct objfile *objfile,
 						    CORE_ADDR address)
 {
-  if (objfile->psymbol_map.empty ())
+  if (m_psymbol_map.empty ())
     {
       std::set<CORE_ADDR> seen_addrs;
 
       for (partial_symtab *pst : require_partial_symbols (objfile, true))
 	{
-	  psym_fill_psymbol_map (objfile, pst,
-				 &seen_addrs,
-				 pst->global_psymbols);
-	  psym_fill_psymbol_map (objfile, pst,
-				 &seen_addrs,
-				 pst->static_psymbols);
+	  fill_psymbol_map (objfile, pst,
+			    &seen_addrs,
+			    pst->global_psymbols);
+	  fill_psymbol_map (objfile, pst,
+			    &seen_addrs,
+			    pst->static_psymbols);
 	}
 
-      objfile->psymbol_map.shrink_to_fit ();
+      m_psymbol_map.shrink_to_fit ();
 
-      std::sort (objfile->psymbol_map.begin (), objfile->psymbol_map.end (),
+      std::sort (m_psymbol_map.begin (), m_psymbol_map.end (),
 		 [] (const std::pair<CORE_ADDR, partial_symtab *> &a,
 		     const std::pair<CORE_ADDR, partial_symtab *> &b)
 		 {
@@ -1400,14 +1401,14 @@ psymbol_functions::find_compunit_symtab_by_address (struct objfile *objfile,
     }
 
   auto iter = std::lower_bound
-    (objfile->psymbol_map.begin (), objfile->psymbol_map.end (), address,
+    (m_psymbol_map.begin (), m_psymbol_map.end (), address,
      [] (const std::pair<CORE_ADDR, partial_symtab *> &a,
 	 CORE_ADDR b)
      {
        return a.first < b;
      });
 
-  if (iter == objfile->psymbol_map.end () || iter->first != address)
+  if (iter == m_psymbol_map.end () || iter->first != address)
     return NULL;
 
   return psymtab_to_symtab (objfile, iter->second);
diff --git a/gdb/quick-symbol.h b/gdb/quick-symbol.h
index 85e7a32eacd..319ffe681c8 100644
--- a/gdb/quick-symbol.h
+++ b/gdb/quick-symbol.h
@@ -228,6 +228,13 @@ struct quick_symbol_functions
   virtual void map_symbol_filenames (struct objfile *objfile,
 				     symbol_filename_ftype *fun, void *data,
 				     int need_fullname) = 0;
+
+  /* This is called when the objfile is relocated.  It can be used to
+     clean up any internal caches.  */
+  virtual void relocated ()
+  {
+    /* Do nothing.  */
+  }
 };
 
 typedef std::unique_ptr<quick_symbol_functions> quick_symbol_functions_up;
-- 
2.26.2


  parent reply	other threads:[~2021-02-28 20:38 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-02-28 20:37 [PATCH 00/26] Allow multiple "partial" symtab readers per objfile Tom Tromey
2021-02-28 20:37 ` [PATCH 01/26] Move some DWARF code out of symfile.h Tom Tromey
2021-02-28 20:37 ` [PATCH 02/26] Introduce dwarf2/public.h Tom Tromey
2021-02-28 20:37 ` [PATCH 03/26] Change objfile_has_partial_symbols to a method Tom Tromey
2021-02-28 20:37 ` [PATCH 04/26] Change objfile::has_partial_symbols to return bool Tom Tromey
2021-02-28 20:37 ` [PATCH 05/26] Introduce method wrappers for quick_symbol_functions Tom Tromey
2021-03-22 13:52   ` Simon Marchi
2021-02-28 20:37 ` [PATCH 06/26] Move quick_symbol_functions to a new header Tom Tromey
2021-02-28 20:37 ` [PATCH 07/26] Move sym_fns::qf to objfile Tom Tromey
2021-02-28 20:37 ` [PATCH 08/26] Convert quick_symbol_functions to use methods Tom Tromey
2021-02-28 20:37 ` Tom Tromey [this message]
2021-02-28 20:37 ` [PATCH 10/26] Change how some psymbol readers access the psymtab storage Tom Tromey
2021-02-28 20:37 ` [PATCH 11/26] Do not pass objfile to psymtab_discarder Tom Tromey
2021-02-28 20:37 ` [PATCH 12/26] Set per_bfd->partial_symtabs earlier Tom Tromey
2021-02-28 20:37 ` [PATCH 13/26] Change how DWARF indices use addrmap Tom Tromey
2021-02-28 20:37 ` [PATCH 14/26] Move psymtab statistics printing to psymtab.c Tom Tromey
2021-02-28 20:37 ` [PATCH 15/26] Change how DWARF index writer finds address map Tom Tromey
2021-02-28 20:37 ` [PATCH 16/26] Reference psymtabs via per_bfd in DWARF reader Tom Tromey
2021-02-28 20:37 ` [PATCH 17/26] Attach partial symtab storage to psymbol_functions Tom Tromey
2021-02-28 20:37 ` [PATCH 18/26] Rearrange psymtab_storage construction Tom Tromey
2021-02-28 20:37 ` [PATCH 19/26] Remove sym_fns::sym_read_psymbols Tom Tromey
2021-02-28 20:37 ` [PATCH 20/26] Introduce objfile::require_partial_symbols Tom Tromey
2021-02-28 20:37 ` [PATCH 21/26] Add partial_symtabs parameter to psymtab construction functions Tom Tromey
2021-02-28 20:37 ` [PATCH 22/26] Remove last objfile partial_symtab references from psymtab.c Tom Tromey
2021-02-28 20:38 ` [PATCH 23/26] Change count_psyms to be a method on psymbol_functions Tom Tromey
2021-02-28 20:38 ` [PATCH 24/26] Remove objfile::psymtabs Tom Tromey
2021-02-28 20:38 ` [PATCH 25/26] Switch objfile to hold a list of psymbol readers Tom Tromey
2021-02-28 20:38 ` [PATCH 26/26] Allow multiple partial symbol readers per objfile Tom Tromey
2021-03-20 23:33 ` [PATCH 00/26] Allow multiple "partial" symtab " Tom Tromey
2021-03-22 14:13   ` Simon Marchi

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=20210228203803.1693413-10-tom@tromey.com \
    --to=tom@tromey.com \
    --cc=gdb-patches@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: link
Be 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).