diff options
author | Doug Evans <xdje42@gmail.com> | 2014-11-18 08:08:00 -0800 |
---|---|---|
committer | Doug Evans <xdje42@gmail.com> | 2014-11-18 08:08:00 -0800 |
commit | f194fefb5e345e8c3b55de1d957bc6d7b95667ad (patch) | |
tree | dcf1e5db1ae8b7e731859f490e23f06155c666d0 /gdb/psymtab.c | |
parent | 6937bb54a9c3ddc7ba330bc18af76f8dbe856ac3 (diff) | |
download | gdb-f194fefb5e345e8c3b55de1d957bc6d7b95667ad.zip gdb-f194fefb5e345e8c3b55de1d957bc6d7b95667ad.tar.gz gdb-f194fefb5e345e8c3b55de1d957bc6d7b95667ad.tar.bz2 |
The result of symtab expansion is always a primary symtab.
gdb/ChangeLog:
* dwarf2read.c (dw2_instantiate_symtab): Add assert.
(dw2_lookup_symbol): Remove unnecessary test for primary symbol table.
* psymtab.c (lookup_symbol_aux_psymtabs): Ditto.
(psymtab_to_symtab): Add comment and assert.
(map_matching_symbols_psymtab): Remove unnecessary test for
non-primary symtab.
Diffstat (limited to 'gdb/psymtab.c')
-rw-r--r-- | gdb/psymtab.c | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/gdb/psymtab.c b/gdb/psymtab.c index 2514b55..9cfc2c1 100644 --- a/gdb/psymtab.c +++ b/gdb/psymtab.c @@ -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, |