]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
[gdb/symtab] Add reset_compunit_symtab users/vries/lazy-symtab-expansion
authorTom de Vries <tdevries@suse.de>
Sat, 12 Jun 2021 08:46:05 +0000 (10:46 +0200)
committerTom de Vries <tdevries@suse.de>
Thu, 24 Jun 2021 15:59:27 +0000 (17:59 +0200)
Add a new function reset_compunit_symtab.

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

index cf6dc08367cf69cb087063ab1dffbb24ed946281..2a2edf5d19aba54bf84858345654563223531afd 100644 (file)
@@ -1729,7 +1729,8 @@ dwarf2_per_objfile::set_symtab (const dwarf2_per_cu_data *per_cu,
                                compunit_symtab *symtab)
 {
   gdb_assert (per_cu->index < this->m_symtabs.size ());
-  gdb_assert (this->m_symtabs[per_cu->index] == nullptr);
+  gdb_assert (this->m_symtabs[per_cu->index] == nullptr
+             || symtab == nullptr);
 
   this->m_symtabs[per_cu->index] = symtab;
 }
@@ -5674,6 +5675,10 @@ struct dwarf2_include_psymtab : public partial_symtab
     return nullptr;
   }
 
+  void reset_compunit_symtab (struct objfile *objfile) override
+  {
+  }
+
 private:
   partial_symtab *includer () const
   {
@@ -8587,6 +8592,13 @@ dwarf2_psymtab::get_compunit_symtab (struct objfile *objfile) const
   return per_objfile->get_symtab (per_cu_data);
 }
 
+void
+dwarf2_psymtab::reset_compunit_symtab (struct objfile *objfile)
+{
+  dwarf2_per_objfile *per_objfile = get_dwarf2_per_objfile (objfile);
+  per_objfile->set_symtab (per_cu_data, nullptr);
+}
+
 /* Trivial hash function for die_info: the hash value of a DIE
    is its offset in .debug_info for this objfile.  */
 
index e341bbd752c0ff251712f43cb881d2009cd5ccbc..043956eaab8fceea41a3c68b1eac1078b4f9ff89 100644 (file)
@@ -626,6 +626,7 @@ struct dwarf2_psymtab : public partial_symtab
   void expand_psymtab (struct objfile *) override;
   bool readin_p (struct objfile *) const override;
   compunit_symtab *get_compunit_symtab (struct objfile *) const override;
+  void reset_compunit_symtab (struct objfile *) override;
 
   struct dwarf2_per_cu_data *per_cu_data;
 };
index 0d1507b14724294d3aaeedd7869523eeba75d567..64ae72f6bcc8343fa44881cab7236c920676583e 100644 (file)
@@ -173,6 +173,9 @@ struct partial_symtab
   virtual struct compunit_symtab *get_compunit_symtab
     (struct objfile *) const = 0;
 
+  virtual void reset_compunit_symtab
+    (struct objfile *) = 0;
+
   /* Return the raw low text address of this partial_symtab.  */
   CORE_ADDR raw_text_low () const
   {
@@ -428,6 +431,11 @@ struct standard_psymtab : public partial_symtab
     return compunit_symtab;
   }
 
+  void reset_compunit_symtab (struct objfile *) override
+  {
+    compunit_symtab = nullptr;
+  }
+
   /* True if the symtab corresponding to this psymtab has been
      readin.  */