aboutsummaryrefslogtreecommitdiff
path: root/gdb/dwarf2read.c
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2010-09-01 21:50:26 +0000
committerTom Tromey <tromey@redhat.com>2010-09-01 21:50:26 +0000
commitfaf68db74604495d6182c228a9dee68a3be50530 (patch)
tree6e58c4e361ce43acb0deb8f7f8ae88794f535e84 /gdb/dwarf2read.c
parent248c9dbc16860034ae6848b04fffe524e2b8cd38 (diff)
downloadgdb-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.c48
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,