summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2021-06-12 10:46:05 +0200
committerTom de Vries <tdevries@suse.de>2021-06-24 17:59:27 +0200
commitad5096892ca6a829f719533f94eaadecc0c5637d (patch)
tree3da373bbf1bcf08589d64b87f566aced8c8ea66e
parentaf7349863ca426ecf789047ca17b960d6f9bbee9 (diff)
downloadbinutils-gdb-users/vries/lazy-symtab-expansion.tar.gz
[gdb/symtab] Add reset_compunit_symtabusers/vries/lazy-symtab-expansion
Add a new function reset_compunit_symtab.
-rw-r--r--gdb/dwarf2/read.c14
-rw-r--r--gdb/dwarf2/read.h1
-rw-r--r--gdb/psympriv.h8
3 files changed, 22 insertions, 1 deletions
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index cf6dc08367c..2a2edf5d19a 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -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. */
diff --git a/gdb/dwarf2/read.h b/gdb/dwarf2/read.h
index e341bbd752c..043956eaab8 100644
--- a/gdb/dwarf2/read.h
+++ b/gdb/dwarf2/read.h
@@ -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;
};
diff --git a/gdb/psympriv.h b/gdb/psympriv.h
index 0d1507b1472..64ae72f6bcc 100644
--- a/gdb/psympriv.h
+++ b/gdb/psympriv.h
@@ -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. */