* objfiles.h (ALL_PRIMARY_SYMTABS): Define.

* ada-lang.c (symtab_for_sym, ada_lookup_symbol_list)
	(ada_lookup_symbol): Use ALL_PRIMARY_SYMTABS.
	* cp-support.c (make_symbol_overload_list_qualified): Likewise.
	* symtab.c (lookup_symbol_aux_block, lookup_symbol_aux_symtabs)
	(basic_lookup_transparent_type, find_pc_sect_symtab, search_symbols)
	(make_symbol_completion_list): Likewise.
This commit is contained in:
Daniel Jacobowitz 2007-01-21 16:55:49 +00:00
parent cb1df416fb
commit 1130965767
5 changed files with 33 additions and 26 deletions

View File

@ -1,3 +1,14 @@
2007-01-21 Daniel Jacobowitz <dan@codesourcery.com>
* objfiles.h (ALL_PRIMARY_SYMTABS): Define.
* ada-lang.c (symtab_for_sym, ada_lookup_symbol_list)
(ada_lookup_symbol): Use ALL_PRIMARY_SYMTABS.
* cp-support.c (make_symbol_overload_list_qualified): Likewise.
* symtab.c (lookup_symbol_aux_block, lookup_symbol_aux_symtabs)
(basic_lookup_transparent_type, find_pc_sect_symtab, search_symbols)
(make_symbol_completion_list): Likewise.
2007-01-21 Jan Kratochvil <jan.kratochvil@redhat.com>
Daniel Jacobowitz <dan@codesourcery.com>

View File

@ -4120,7 +4120,7 @@ symtab_for_sym (struct symbol *sym)
struct dict_iterator iter;
int j;
ALL_SYMTABS (objfile, s)
ALL_PRIMARY_SYMTABS (objfile, s)
{
switch (SYMBOL_CLASS (sym))
{
@ -4549,11 +4549,9 @@ ada_lookup_symbol_list (const char *name0, const struct block *block0,
/* Now add symbols from all global blocks: symbol tables, minimal symbol
tables, and psymtab's. */
ALL_SYMTABS (objfile, s)
ALL_PRIMARY_SYMTABS (objfile, s)
{
QUIT;
if (!s->primary)
continue;
bv = BLOCKVECTOR (s);
block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
ada_add_block_symbols (&symbol_list_obstack, block, name, namespace,
@ -4619,11 +4617,9 @@ ada_lookup_symbol_list (const char *name0, const struct block *block0,
if (num_defns_collected (&symbol_list_obstack) == 0)
{
ALL_SYMTABS (objfile, s)
ALL_PRIMARY_SYMTABS (objfile, s)
{
QUIT;
if (!s->primary)
continue;
bv = BLOCKVECTOR (s);
block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
ada_add_block_symbols (&symbol_list_obstack, block, name, namespace,
@ -4703,7 +4699,7 @@ ada_lookup_symbol (const char *name, const struct block *block0,
/* Search the list of symtabs for one which contains the
address of the start of this block. */
ALL_SYMTABS (objfile, s)
ALL_PRIMARY_SYMTABS (objfile, s)
{
bv = BLOCKVECTOR (s);
b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);

View File

@ -750,7 +750,7 @@ make_symbol_overload_list_qualified (const char *func_name)
/* Go through the symtabs and check the externs and statics for
symbols which match. */
ALL_SYMTABS (objfile, s)
ALL_PRIMARY_SYMTABS (objfile, s)
{
QUIT;
b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
@ -764,7 +764,7 @@ make_symbol_overload_list_qualified (const char *func_name)
}
}
ALL_SYMTABS (objfile, s)
ALL_PRIMARY_SYMTABS (objfile, s)
{
QUIT;
b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);

View File

@ -603,6 +603,14 @@ extern void *objfile_data (struct objfile *objfile,
ALL_OBJFILES (objfile) \
ALL_OBJFILE_SYMTABS (objfile, s)
/* Traverse all symtabs in all objfiles, skipping included files
(which share a blockvector with their primary symtab). */
#define ALL_PRIMARY_SYMTABS(objfile, s) \
ALL_OBJFILES (objfile) \
ALL_OBJFILE_SYMTABS (objfile, s) \
if ((s)->primary)
/* Traverse all psymtabs in all objfiles. */
#define ALL_PSYMTABS(objfile, p) \

View File

@ -1269,7 +1269,7 @@ lookup_symbol_aux_block (const char *name, const char *linkage_name,
{
/* Search the list of symtabs for one which contains the
address of the start of this block. */
ALL_SYMTABS (objfile, s)
ALL_PRIMARY_SYMTABS (objfile, s)
{
bv = BLOCKVECTOR (s);
b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
@ -1304,7 +1304,7 @@ lookup_symbol_aux_symtabs (int block_index,
const struct block *block;
struct symtab *s;
ALL_SYMTABS (objfile, s)
ALL_PRIMARY_SYMTABS (objfile, s)
{
bv = BLOCKVECTOR (s);
block = BLOCKVECTOR_BLOCK (bv, block_index);
@ -1719,7 +1719,7 @@ basic_lookup_transparent_type (const char *name)
of the desired name as a global, then do psymtab-to-symtab
conversion on the fly and return the found symbol. */
ALL_SYMTABS (objfile, s)
ALL_PRIMARY_SYMTABS (objfile, s)
{
bv = BLOCKVECTOR (s);
block = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
@ -1767,7 +1767,7 @@ basic_lookup_transparent_type (const char *name)
conversion on the fly and return the found symbol.
*/
ALL_SYMTABS (objfile, s)
ALL_PRIMARY_SYMTABS (objfile, s)
{
bv = BLOCKVECTOR (s);
block = BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK);
@ -1944,7 +1944,7 @@ find_pc_sect_symtab (CORE_ADDR pc, asection *section)
It also happens for objfiles that have their functions reordered.
For these, the symtab we are looking for is not necessarily read in. */
ALL_SYMTABS (objfile, s)
ALL_PRIMARY_SYMTABS (objfile, s)
{
bv = BLOCKVECTOR (s);
b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK);
@ -2897,7 +2897,6 @@ search_symbols (char *regexp, domain_enum kind, int nfiles, char *files[],
struct symtab *s;
struct partial_symtab *ps;
struct blockvector *bv;
struct blockvector *prev_bv = 0;
struct block *b;
int i = 0;
struct dict_iterator iter;
@ -3079,15 +3078,9 @@ search_symbols (char *regexp, domain_enum kind, int nfiles, char *files[],
}
}
ALL_SYMTABS (objfile, s)
ALL_PRIMARY_SYMTABS (objfile, s)
{
bv = BLOCKVECTOR (s);
/* Often many files share a blockvector.
Scan each blockvector only once so that
we don't get every symbol many times.
It happens that the first symtab in the list
for any given blockvector is the main file. */
if (bv != prev_bv)
for (i = GLOBAL_BLOCK; i <= STATIC_BLOCK; i++)
{
struct symbol_search *prevtail = tail;
@ -3139,7 +3132,6 @@ search_symbols (char *regexp, domain_enum kind, int nfiles, char *files[],
tail = sort_search_symbols (prevtail, nfound);
}
}
prev_bv = bv;
}
/* If there are no eyes, avoid all contact. I mean, if there are
@ -3704,7 +3696,7 @@ make_symbol_completion_list (char *text, char *word)
/* Go through the symtabs and check the externs and statics for
symbols which match. */
ALL_SYMTABS (objfile, s)
ALL_PRIMARY_SYMTABS (objfile, s)
{
QUIT;
b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), GLOBAL_BLOCK);
@ -3714,7 +3706,7 @@ make_symbol_completion_list (char *text, char *word)
}
}
ALL_SYMTABS (objfile, s)
ALL_PRIMARY_SYMTABS (objfile, s)
{
QUIT;
b = BLOCKVECTOR_BLOCK (BLOCKVECTOR (s), STATIC_BLOCK);