Do not pass objfile to psymtab_discarder
authorTom Tromey <tom@tromey.com>
Sat, 20 Mar 2021 23:23:40 +0000 (17:23 -0600)
committerTom Tromey <tom@tromey.com>
Sat, 20 Mar 2021 23:23:42 +0000 (17:23 -0600)
This changes the psymtab_discarder to not assume that partial symtabs
are attached to the objfile.  Instead, a psymtab_storage object is
passed directly to it.

gdb/ChangeLog
2021-03-20  Tom Tromey  <tom@tromey.com>

* psympriv.h (psymtab_discarder): Take psymtab_storage parameter.
(~psymtab_discarder, keep): Update.
<m_objfile>: Remove.
<m_partial_symtabs>: New member.
* dwarf2/read.c (dwarf2_build_psymtabs): Update.

gdb/ChangeLog
gdb/dwarf2/read.c
gdb/psympriv.h

index 491ddd5e2b20314181333d35371eedf51f6d0288..7bb862e43f002793b7e8c9f2ebb78b63db61bd1d 100644 (file)
@@ -1,3 +1,11 @@
+2021-03-20  Tom Tromey  <tom@tromey.com>
+
+       * psympriv.h (psymtab_discarder): Take psymtab_storage parameter.
+       (~psymtab_discarder, keep): Update.
+       <m_objfile>: Remove.
+       <m_partial_symtabs>: New member.
+       * dwarf2/read.c (dwarf2_build_psymtabs): Update.
+
 2021-03-20  Tom Tromey  <tom@tromey.com>
 
        * xcoffread.c (xcoff_end_psymtab): Add partial_symtabs parameter.
index 19e5cdb6d5abd377ce87658c20195fa32ae161cb..aad25f7c086306b5a2902ed42d41f87c3602d986 100644 (file)
@@ -6142,7 +6142,7 @@ dwarf2_build_psymtabs (struct objfile *objfile)
       /* This isn't really ideal: all the data we allocate on the
         objfile's obstack is still uselessly kept around.  However,
         freeing it seems unsafe.  */
-      psymtab_discarder psymtabs (objfile);
+      psymtab_discarder psymtabs (objfile->partial_symtabs.get ());
       dwarf2_build_psymtabs_hard (per_objfile);
       psymtabs.keep ();
 
index 73f00a50992f125354b57c8957151ce1a02edafe..0f24c104aca1cbf46033e3e15f2b2ab4166fced5 100644 (file)
@@ -446,29 +446,28 @@ class psymtab_discarder
 {
  public:
 
-  psymtab_discarder (struct objfile *objfile)
-    : m_objfile (objfile),
-      m_psymtab (objfile->partial_symtabs->psymtabs)
+  psymtab_discarder (psymtab_storage *partial_symtabs)
+    : m_partial_symtabs (partial_symtabs),
+      m_psymtab (partial_symtabs->psymtabs)
   {
   }
 
   ~psymtab_discarder ()
   {
-    if (m_objfile != NULL)
-      m_objfile->partial_symtabs->discard_psymtabs_to (m_psymtab);
+    if (m_partial_symtabs != nullptr)
+      m_partial_symtabs->discard_psymtabs_to (m_psymtab);
   }
 
   /* Keep any partial symbol tables that were built.  */
   void keep ()
   {
-    m_objfile = NULL;
+    m_partial_symtabs = nullptr;
   }
 
  private:
 
-  /* The objfile.  If NULL this serves as a sentinel to indicate that
-     the psymtabs should be kept.  */
-  struct objfile *m_objfile;
+  /* The partial symbol storage object.  */
+  psymtab_storage *m_partial_symtabs;
   /* How far back to free.  */
   struct partial_symtab *m_psymtab;
 };