return;
expansion_state = partial_symtab::lazy;
auto it = sect_off.find (psym);
+ if (it == sect_off.end ())
+ {
+ expansion_state = partial_symtab::full;
+ return;
+ }
interesting_symbols.emplace (it->second);
}
+ void note_no_interesting_symbol ()
+ {
+ if (expansion_state == partial_symtab::full)
+ return;
+ expansion_state = partial_symtab::full;
+ interesting_symbols.clear ();
+ expanded_interesting_symbols = 0;
+ }
+
enum expansion_state { unexpanded, lazy, full };
enum expansion_state expansion_state = unexpanded;
size_t expanded_interesting_symbols = 0;
a worse chosen section due to the TEXTLOW/TEXTHIGH ranges
overlap. */
if (lazy_expand_symtab_p && p == nullptr)
- p = find_pc_sect_psymbol (objfile, pst, pc, section);
+ {
+ struct partial_symbol *p2;
+ p2 = find_pc_sect_psymbol (objfile, pst, pc, section);
+ if (p2 == nullptr)
+ pst->note_no_interesting_symbol ();
+ }
return pst;
}
best_pst = find_pc_sect_psymtab_closer (objfile, pc, section, pst,
msymbol);
if (best_pst != NULL)
- return best_pst;
+ {
+ struct partial_symbol *p2;
+ p2 = find_pc_sect_psymbol (objfile, best_pst, pc, section);
+ if (p2 == nullptr)
+ best_pst->note_no_interesting_symbol ();
+
+ return best_pst;
+ }
}
return NULL;
for (partial_symtab *ps : require_partial_symbols (objfile))
{
QUIT;
- if (!ps->readin_p (objfile)
- && match_partial_symbol (objfile, ps, global, name, domain,
- ordered_compare))
- psymtab_to_symtab (objfile, ps);
+ if (ps->readin_p (objfile))
+ continue;
+
+ partial_symbol *psym
+ = match_partial_symbol (objfile, ps, global, name, domain,
+ ordered_compare);
+ if (psym == nullptr)
+ continue;
+ ps->note_interesting_symbol (psym);
+ psymtab_to_symtab (objfile, ps);
}
}
*psym_lookup_name,
symbol_matcher))
{
+ if (symbol_matcher == NULL && lookup_name == NULL)
+ ps->note_no_interesting_symbol ();
+
struct compunit_symtab *symtab =
psymtab_to_symtab (objfile, ps);