aboutsummaryrefslogtreecommitdiff
path: root/gdb/buildsym.c
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2012-05-10 19:50:09 +0000
committerTom Tromey <tromey@redhat.com>2012-05-10 19:50:09 +0000
commit8157b174fd3b230a9d2cca6dae07562b38bad9fe (patch)
tree16844a9f26a2871e5d4f1679c3ed8bfbe9d84f3b /gdb/buildsym.c
parenta2ca7a527ea93943b440b592de2f71c5a9e03392 (diff)
downloadgdb-8157b174fd3b230a9d2cca6dae07562b38bad9fe.zip
gdb-8157b174fd3b230a9d2cca6dae07562b38bad9fe.tar.gz
gdb-8157b174fd3b230a9d2cca6dae07562b38bad9fe.tar.bz2
* tracepoint.c (scope_info): Update.
* symtab.c (lookup_block_symbol, iterate_over_symbols) (find_pc_sect_symtab, search_symbols) (default_make_symbol_completion_list_break_on) (make_file_symbol_completion_list): Update. * symmisc.c (dump_symtab_1): Update. * stack.c (print_frame_args, iterate_over_block_locals) (print_frame_labels, iterate_over_block_arg_vars): Update. * python/py-block.c (block_object) <dict>: Remove. <block>: New field. <iter>: Change type. (blpy_iter): Update. (blpy_block_syms_iternext): Update. * psymtab.c (map_block): Use block iterators. * objfiles.c (objfile_relocate1): Use ALL_DICT_SYMBOLS. * mi/mi-cmd-stack.c (list_args_or_locals): Update. * mdebugread.c (parse_symbol, mylookup_symbol): Update. * infrun.c (check_exception_resume): Update. * cp-support.c (make_symbol_overload_list_block): Update. * coffread.c (patch_opaque_types): Update. * buildsym.c (finish_block, end_symtab): Use ALL_DICT_SYMBOLS. * block.h (struct block_iterator): New. (block_iterator_first, block_iterator_next, block_iter_name_first) (block_iter_name_next, block_iter_match_first) (block_iter_match_next): Declare. (ALL_BLOCK_SYMBOLS): Redefine. * block.c (block_iterator_first, block_iterator_next) (block_iter_name_first, block_iter_name_next) (block_iter_match_first, block_iter_match_next): New functions. * ada-lang.c (ada_add_block_symbols) (ada_make_symbol_completion_list): Use block iterator.
Diffstat (limited to 'gdb/buildsym.c')
-rw-r--r--gdb/buildsym.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/gdb/buildsym.c b/gdb/buildsym.c
index 36b1395..58c2693 100644
--- a/gdb/buildsym.c
+++ b/gdb/buildsym.c
@@ -261,7 +261,10 @@ finish_block (struct symbol *symbol, struct pending **listhead,
parameter symbols. */
int nparams = 0, iparams;
struct symbol *sym;
- ALL_BLOCK_SYMBOLS (block, iter, sym)
+
+ /* Here we want to directly access the dictionary, because
+ we haven't fully initialized the block yet. */
+ ALL_DICT_SYMBOLS (BLOCK_DICT (block), iter, sym)
{
if (SYMBOL_IS_ARGUMENT (sym))
nparams++;
@@ -273,7 +276,9 @@ finish_block (struct symbol *symbol, struct pending **listhead,
TYPE_ALLOC (ftype, nparams * sizeof (struct field));
iparams = 0;
- ALL_BLOCK_SYMBOLS (block, iter, sym)
+ /* Here we want to directly access the dictionary, because
+ we haven't fully initialized the block yet. */
+ ALL_DICT_SYMBOLS (BLOCK_DICT (block), iter, sym)
{
if (iparams == nparams)
break;
@@ -1173,9 +1178,9 @@ end_symtab (CORE_ADDR end_addr, struct objfile *objfile, int section)
if (SYMBOL_SYMTAB (BLOCK_FUNCTION (block)) == NULL)
SYMBOL_SYMTAB (BLOCK_FUNCTION (block)) = symtab;
- for (sym = dict_iterator_first (BLOCK_DICT (block), &iter);
- sym != NULL;
- sym = dict_iterator_next (&iter))
+ /* Note that we only want to fix up symbols from the local
+ blocks, not blocks coming from included symtabs. */
+ ALL_DICT_SYMBOLS (BLOCK_DICT (block), iter, sym)
if (SYMBOL_SYMTAB (sym) == NULL)
SYMBOL_SYMTAB (sym) = symtab;
}