From 89a9d1b1639d01840668fbc6937f79c433fad24b Mon Sep 17 00:00:00 2001 From: David Carlton Date: Tue, 20 May 2003 01:26:58 +0000 Subject: [PATCH] 2003-05-19 David Carlton * block.h: Declare block_static_block. * block.c (block_static_block): New. * symtab.c (lookup_symbol_aux): Remove 'static_block' argument to lookup_symbol_aux_local, calling block_static_block instead. (lookup_symbol_aux_local): Delete 'static_block' argument. --- gdb/ChangeLog | 8 ++++++++ gdb/block.c | 15 +++++++++++++++ gdb/block.h | 2 ++ gdb/symtab.c | 27 +++++++++++---------------- 4 files changed, 36 insertions(+), 16 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index b12cc7b58e4..3dd4a52d2ba 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2003-05-19 David Carlton + + * block.h: Declare block_static_block. + * block.c (block_static_block): New. + * symtab.c (lookup_symbol_aux): Remove 'static_block' argument to + lookup_symbol_aux_local, calling block_static_block instead. + (lookup_symbol_aux_local): Delete 'static_block' argument. + 2003-05-19 David Carlton * symtab.c (lookup_symbol_aux): Delete #if 0 hunk. diff --git a/gdb/block.c b/gdb/block.c index 7bfd8663848..1360a1589d0 100644 --- a/gdb/block.c +++ b/gdb/block.c @@ -199,3 +199,18 @@ block_initialize_namespace (struct block *block, struct obstack *obstack) BLOCK_NAMESPACE (block)->using = NULL; } } + +/* Return the static block associated to BLOCK. Return NULL if block + is NULL or if block is a global block. */ + +const struct block * +block_static_block (const struct block *block) +{ + if (block == NULL || BLOCK_SUPERBLOCK (block) == NULL) + return NULL; + + while (BLOCK_SUPERBLOCK (BLOCK_SUPERBLOCK (block)) != NULL) + block = BLOCK_SUPERBLOCK (block); + + return block; +} diff --git a/gdb/block.h b/gdb/block.h index 2fef52adc96..17c726dc17f 100644 --- a/gdb/block.h +++ b/gdb/block.h @@ -207,4 +207,6 @@ extern void block_set_using (struct block *block, struct using_direct *using, struct obstack *obstack); +extern const struct block *block_static_block (const struct block *block); + #endif /* BLOCK_H */ diff --git a/gdb/symtab.c b/gdb/symtab.c index 9b01d45f7bb..62e37b8f468 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -93,8 +93,7 @@ struct symbol *lookup_symbol_aux_local (const char *name, const char *linkage_name, const struct block *block, const domain_enum domain, - struct symtab **symtab, - const struct block **static_block); + struct symtab **symtab); static struct symbol *lookup_symbol_aux_block (const char *name, @@ -964,7 +963,7 @@ lookup_symbol_aux (const char *name, const char *linkage_name, STATIC_BLOCK or GLOBAL_BLOCK. */ sym = lookup_symbol_aux_local (name, linkage_name, block, domain, - symtab, &static_block); + symtab); if (sym != NULL) return sym; @@ -1008,6 +1007,7 @@ lookup_symbol_aux (const char *name, const char *linkage_name, than that one, so I don't think we should worry about that for now. */ + static_block = block_static_block (block); if (static_block != NULL) { sym = lookup_symbol_aux_block (name, linkage_name, static_block, @@ -1053,27 +1053,23 @@ lookup_symbol_aux (const char *name, const char *linkage_name, } /* Check to see if the symbol is defined in BLOCK or its superiors. - Don't search STATIC_BLOCK or GLOBAL_BLOCK. If we don't find a - match, store the address of STATIC_BLOCK in static_block. */ + Don't search STATIC_BLOCK or GLOBAL_BLOCK. */ static struct symbol * lookup_symbol_aux_local (const char *name, const char *linkage_name, const struct block *block, const domain_enum domain, - struct symtab **symtab, - const struct block **static_block) + struct symtab **symtab) { struct symbol *sym; - + const struct block *static_block = block_static_block (block); + /* Check if either no block is specified or it's a global block. */ - if (block == NULL || BLOCK_SUPERBLOCK (block) == NULL) - { - *static_block = NULL; - return NULL; - } + if (static_block == NULL) + return NULL; - while (BLOCK_SUPERBLOCK (BLOCK_SUPERBLOCK (block)) != NULL) + while (block != static_block) { sym = lookup_symbol_aux_block (name, linkage_name, block, domain, symtab); @@ -1082,9 +1078,8 @@ lookup_symbol_aux_local (const char *name, const char *linkage_name, block = BLOCK_SUPERBLOCK (block); } - /* We've reached the static block. */ + /* We've reached the static block without finding a result. */ - *static_block = block; return NULL; } -- 2.30.2