aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2021-06-23 10:00:34 +0200
committerTom de Vries <tdevries@suse.de>2021-06-24 17:59:27 +0200
commit97e15a660e09bc376599d4be727b6e2e56b362c6 (patch)
tree03e2f4d64711f2bcc4cc9120c7614141faf3f9fb
parent4f262e61dda349718662576248a94974cb2216cf (diff)
downloadbinutils-97e15a660e09bc376599d4be727b6e2e56b362c6.zip
binutils-97e15a660e09bc376599d4be727b6e2e56b362c6.tar.gz
binutils-97e15a660e09bc376599d4be727b6e2e56b362c6.tar.bz2
fix
-rw-r--r--gdb/psymtab.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/gdb/psymtab.c b/gdb/psymtab.c
index c4808bc..87d0f4a 100644
--- a/gdb/psymtab.c
+++ b/gdb/psymtab.c
@@ -595,10 +595,16 @@ lookup_partial_symbol (struct objfile *objfile,
static struct compunit_symtab *
psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst)
{
+ gdb_assert (pst->expansion_state != partial_symtab::unexpanded);
+
/* If it is a shared psymtab, find an unshared psymtab that includes
it. Any such psymtab will do. */
while (pst->user != NULL)
- pst = pst->user;
+ {
+ pst = pst->user;
+ if (pst->expansion_state == partial_symtab::unexpanded)
+ pst->expansion_state = partial_symtab::lazy;
+ }
gdb_assert (pst->expansion_state != partial_symtab::unexpanded);
@@ -652,6 +658,7 @@ psymbol_functions::find_last_source_symtab (struct objfile *ofp)
}
else
{
+ cs_pst->note_no_interesting_symbol ();
struct compunit_symtab *cust = psymtab_to_symtab (ofp, cs_pst);
if (cust == NULL)
@@ -1202,6 +1209,8 @@ psymbol_functions::expand_symtabs_matching
{
if (symbol_matcher == NULL && lookup_name == NULL)
ps->note_no_interesting_symbol ();
+ else if (ps->expansion_state == partial_symtab::unexpanded)
+ ps->expansion_state = partial_symtab::lazy;
struct compunit_symtab *symtab =
psymtab_to_symtab (objfile, ps);