diff options
author | Tom Tromey <tromey@redhat.com> | 2010-09-01 21:50:26 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2010-09-01 21:50:26 +0000 |
commit | faf68db74604495d6182c228a9dee68a3be50530 (patch) | |
tree | 6e58c4e361ce43acb0deb8f7f8ae88794f535e84 /gdb/dwarf2read.c | |
parent | 248c9dbc16860034ae6848b04fffe524e2b8cd38 (diff) | |
download | gdb-faf68db74604495d6182c228a9dee68a3be50530.zip gdb-faf68db74604495d6182c228a9dee68a3be50530.tar.gz gdb-faf68db74604495d6182c228a9dee68a3be50530.tar.bz2 |
* symtab.h (lookup_type_symbol): Declare.
* symtab.c (lookup_symbol_in_language_full): Rename from
lookup_symbol_in_language. Add 'for_type' argument.
(lookup_symbol_in_language): New function.
(lookup_type_symbol): Likewise.
(lookup_symbol_aux): Add 'for_type' argument.
(match_symbol_aux): New function.
(lookup_symbol_aux_symtabs): Use expand_one_symtab_matching.
(match_transparent_type): New function.
(basic_lookup_transparent_type): Use expand_one_symtab_matching.
* symfile.h (struct quick_symbol_functions)
<pre_expand_symtabs_matching>: Remove.
<expand_one_symtab_matching>: New field.
* psymtab.c (expand_one_symtab_matching_psymtabs): New function.
(pre_expand_symtabs_matching_psymtabs): Remove.
(psym_functions): Update.
* gdbtypes.c (lookup_typename): Use lookup_type_symbol.
* dwarf2read.c (dw2_lookup_symbol): Update comment.
(dw2_pre_expand_symtabs_matching): Remove.
(dw2_expand_one_symtab_matching): New function.
(dwarf2_gdb_index_functions): Update.
Diffstat (limited to 'gdb/dwarf2read.c')
-rw-r--r-- | gdb/dwarf2read.c | 48 |
1 files changed, 41 insertions, 7 deletions
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index c531864..5b58a5b 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -2198,7 +2198,7 @@ static struct symtab * dw2_lookup_symbol (struct objfile *objfile, int block_index, const char *name, domain_enum domain) { - /* We do all the work in the pre_expand_symtabs_matching hook + /* We do all the work in the expand_one_symtab_matching hook instead. */ return NULL; } @@ -2229,12 +2229,46 @@ dw2_do_expand_symtabs_matching (struct objfile *objfile, const char *name) } } -static void -dw2_pre_expand_symtabs_matching (struct objfile *objfile, - int kind, const char *name, - domain_enum domain) +static struct symbol * +dw2_expand_one_symtab_matching (struct objfile *objfile, + int kind, const char *name, + domain_enum domain, + struct symbol *(*matcher) (struct symtab *, + int, + const char *, + domain_enum, + void *), + void *data) { - dw2_do_expand_symtabs_matching (objfile, name); + dw2_setup (objfile); + + if (dwarf2_per_objfile->index_table) + { + offset_type *vec; + + if (find_slot_in_mapped_hash (dwarf2_per_objfile->index_table, + name, &vec)) + { + offset_type i, len = MAYBE_SWAP (*vec); + for (i = 0; i < len; ++i) + { + offset_type cu_index = MAYBE_SWAP (vec[i + 1]); + struct dwarf2_per_cu_data *cu = dw2_get_cu (cu_index); + struct symtab *symtab; + struct symbol *sym; + + if (cu->v.quick->symtab) + continue; + + symtab = dw2_instantiate_symtab (objfile, cu); + sym = matcher (symtab, kind, name, domain, data); + if (sym) + return sym; + } + } + } + + return NULL; } static void @@ -2538,7 +2572,7 @@ const struct quick_symbol_functions dwarf2_gdb_index_functions = dw2_forget_cached_source_info, dw2_lookup_symtab, dw2_lookup_symbol, - dw2_pre_expand_symtabs_matching, + dw2_expand_one_symtab_matching, dw2_print_stats, dw2_dump, dw2_relocate, |