diff options
author | David Carlton <carlton@bactrian.org> | 2002-12-05 21:07:49 +0000 |
---|---|---|
committer | David Carlton <carlton@bactrian.org> | 2002-12-05 21:07:49 +0000 |
commit | f61e8913ab490a3f00c43cdec07f2354f4b9a294 (patch) | |
tree | 11fccc7135f8f9d06f5842b275f1a55e44d1bfaa /gdb/symtab.c | |
parent | db1ac78dbeae71e96f03dfc5ec18ae1e9f19066e (diff) | |
download | gdb-f61e8913ab490a3f00c43cdec07f2354f4b9a294.zip gdb-f61e8913ab490a3f00c43cdec07f2354f4b9a294.tar.gz gdb-f61e8913ab490a3f00c43cdec07f2354f4b9a294.tar.bz2 |
2002-12-05 David Carlton <carlton@math.stanford.edu>
* symtab.c (lookup_symbol_aux_block): New function.
(lookup_symbol_aux_local): Move code into lookup_symbol_aux_block.
Diffstat (limited to 'gdb/symtab.c')
-rw-r--r-- | gdb/symtab.c | 68 |
1 files changed, 47 insertions, 21 deletions
diff --git a/gdb/symtab.c b/gdb/symtab.c index a891d35..53c1f08 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -90,6 +90,13 @@ static struct symbol *lookup_symbol_aux_local (const char *name, struct symtab **symtab); static +struct symbol *lookup_symbol_aux_block (const char *name, + const char *mangled_name, + const struct block *block, + const namespace_enum namespace, + struct symtab **symtab); + +static struct symbol *lookup_symbol_aux_symtabs (int block_index, const char *name, const char *mangled_name, @@ -964,36 +971,55 @@ lookup_symbol_aux_local (const char *name, const char *mangled_name, struct symtab **symtab) { struct symbol *sym; + + while (block != 0) + { + sym = lookup_symbol_aux_block (name, mangled_name, block, namespace, + symtab); + if (sym != NULL) + return sym; + block = BLOCK_SUPERBLOCK (block); + } + + return NULL; +} + +/* Look up a symbol in a block; if found, locate its symtab, fixup the + symbol, and set block_found appropriately. */ + +static struct symbol * +lookup_symbol_aux_block (const char *name, const char *mangled_name, + const struct block *block, + const namespace_enum namespace, + struct symtab **symtab) +{ + struct symbol *sym; struct objfile *objfile = NULL; struct blockvector *bv; struct block *b; struct symtab *s = NULL; - - while (block != 0) + + sym = lookup_block_symbol (block, name, mangled_name, namespace); + if (sym) { - sym = lookup_block_symbol (block, name, mangled_name, namespace); - if (sym) + block_found = block; + if (symtab != NULL) { - block_found = block; - if (symtab != NULL) + /* Search the list of symtabs for one which contains the + address of the start of this block. */ + ALL_SYMTABS (objfile, s) { - /* Search the list of symtabs for one which contains the - address of the start of this block. */ - ALL_SYMTABS (objfile, s) - { - bv = BLOCKVECTOR (s); - b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK); - if (BLOCK_START (b) <= BLOCK_START (block) - && BLOCK_END (b) > BLOCK_START (block)) - goto found; - } - found: - *symtab = s; + bv = BLOCKVECTOR (s); + b = BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK); + if (BLOCK_START (b) <= BLOCK_START (block) + && BLOCK_END (b) > BLOCK_START (block)) + goto found; } - - return fixup_symbol_section (sym, objfile); + found: + *symtab = s; } - block = BLOCK_SUPERBLOCK (block); + + return fixup_symbol_section (sym, objfile); } return NULL; |