@@ -2660,6 +2660,10 @@ dw2_instantiate_symtab (struct dwarf2_per_cu_data *per_cu)
process_cu_includes ();
do_cleanups (back_to);
}
+
+ /* The result of symtab expansion is always the primary symtab. */
+ gdb_assert (per_cu->v.quick->symtab->primary);
+
return per_cu->v.quick->symtab;
}
@@ -3607,17 +3611,13 @@ dw2_lookup_symbol (struct objfile *objfile, int block_index,
{
struct symbol *sym = NULL;
struct symtab *stab = dw2_instantiate_symtab (per_cu);
+ const struct blockvector *bv = BLOCKVECTOR (stab);
+ struct block *block = BLOCKVECTOR_BLOCK (bv, block_index);
/* Some caution must be observed with overloaded functions
and methods, since the index will not contain any overload
information (but NAME might contain it). */
- if (stab->primary)
- {
- const struct blockvector *bv = BLOCKVECTOR (stab);
- struct block *block = BLOCKVECTOR_BLOCK (bv, block_index);
-
- sym = block_lookup_symbol (block, name, domain);
- }
+ sym = block_lookup_symbol (block, name, domain);
if (sym && strcmp_iw (SYMBOL_SEARCH_NAME (sym), name) == 0)
{
@@ -510,17 +510,16 @@ lookup_symbol_aux_psymtabs (struct objfile *objfile,
{
struct symbol *sym = NULL;
struct symtab *stab = psymtab_to_symtab (objfile, ps);
+ /* Note: While psymtab_to_symtab can return NULL if the partial symtab
+ is empty, we can assume it won't here because lookup_partial_symbol
+ succeeded. */
+ const struct blockvector *bv = BLOCKVECTOR (stab);
+ struct block *block = BLOCKVECTOR_BLOCK (bv, block_index);
/* Some caution must be observed with overloaded functions
and methods, since the psymtab will not contain any overload
information (but NAME might contain it). */
- if (stab->primary)
- {
- const struct blockvector *bv = BLOCKVECTOR (stab);
- struct block *block = BLOCKVECTOR_BLOCK (bv, block_index);
-
- sym = block_lookup_symbol (block, name, domain);
- }
+ sym = block_lookup_symbol (block, name, domain);
if (sym && strcmp_iw (SYMBOL_SEARCH_NAME (sym), name) == 0)
{
@@ -756,7 +755,10 @@ lookup_partial_symbol (struct objfile *objfile,
}
/* Get the symbol table that corresponds to a partial_symtab.
- This is fast after the first time you do it. */
+ This is fast after the first time you do it.
+ The result will be NULL if the primary symtab has no symbols,
+ which can happen. Otherwise the result is the primary symtab
+ that contains PST. */
static struct symtab *
psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst)
@@ -779,6 +781,9 @@ psymtab_to_symtab (struct objfile *objfile, struct partial_symtab *pst)
do_cleanups (back_to);
}
+ if (pst->symtab != NULL)
+ gdb_assert (pst->symtab->primary);
+
return pst->symtab;
}
@@ -1259,7 +1264,7 @@ map_matching_symbols_psymtab (struct objfile *objfile,
struct symtab *s = psymtab_to_symtab (objfile, ps);
struct block *block;
- if (s == NULL || !s->primary)
+ if (s == NULL)
continue;
block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), block_kind);
if (map_block (name, namespace, objfile, block,