diff options
-rw-r--r-- | gdb/ChangeLog | 31 | ||||
-rw-r--r-- | gdb/coffread.c | 1 | ||||
-rw-r--r-- | gdb/dbxread.c | 1 | ||||
-rw-r--r-- | gdb/elfread.c | 42 | ||||
-rw-r--r-- | gdb/machoread.c | 1 | ||||
-rw-r--r-- | gdb/mipsread.c | 1 | ||||
-rw-r--r-- | gdb/objfiles.h | 4 | ||||
-rw-r--r-- | gdb/psymtab.c | 3 | ||||
-rw-r--r-- | gdb/symfile-debug.c | 75 | ||||
-rw-r--r-- | gdb/symfile.c | 2 | ||||
-rw-r--r-- | gdb/symfile.h | 4 | ||||
-rw-r--r-- | gdb/xcoffread.c | 1 |
12 files changed, 77 insertions, 89 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 82a82c9..55487d4 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,36 @@ 2021-03-20 Tom Tromey <tom@tromey.com> + * psymtab.c (require_partial_symbols): Check that 'sf' is not + null. + * xcoffread.c (xcoff_sym_fns): Update. + * symfile.h (struct sym_fns) <qf>: Remove. + * symfile.c (syms_from_objfile_1, reread_symbols): Update. + * symfile-debug.c (objfile::has_partial_symbols) + (objfile::find_last_source_symtab) + (objfile::forget_cached_source_info) + (objfile::map_symtabs_matching_filename, objfile::lookup_symbol) + (objfile::print_stats, objfile::dump) + (objfile::expand_symtabs_for_function) + (objfile::expand_all_symtabs) + (objfile::expand_symtabs_with_fullname) + (objfile::map_matching_symbols) + (objfile::expand_symtabs_matching) + (objfile::find_pc_sect_compunit_symtab) + (objfile::map_symbol_filenames) + (objfile::find_compunit_symtab_by_address) + (objfile::lookup_global_symbol_language, debug_sym_fns) + (install_symfile_debug_logging): Update. + * objfiles.h (struct objfile) <qf>: New member. + * mipsread.c (ecoff_sym_fns): Update. + * machoread.c (macho_sym_fns): Update. + * elfread.c (elf_sym_fns_gdb_index, elf_sym_fns_debug_names): + Don't declare. + (elf_symfile_read, elf_sym_fns, elf_sym_fns_lazy_psyms): Update. + * dbxread.c (aout_sym_fns): Update. + * coffread.c (coff_sym_fns): Update. + +2021-03-20 Tom Tromey <tom@tromey.com> + * symfile.h (symbol_compare_ftype, symbol_filename_ftype) (expand_symtabs_file_matcher_ftype) (expand_symtabs_symbol_matcher_ftype) diff --git a/gdb/coffread.c b/gdb/coffread.c index badcb5a..676deec 100644 --- a/gdb/coffread.c +++ b/gdb/coffread.c @@ -2180,7 +2180,6 @@ static const struct sym_fns coff_sym_fns = default_symfile_relocate, /* sym_relocate: Relocate a debug section. */ NULL, /* sym_probe_fns */ - &psym_functions }; void _initialize_coffread (); diff --git a/gdb/dbxread.c b/gdb/dbxread.c index 6450cd3..9003822 100644 --- a/gdb/dbxread.c +++ b/gdb/dbxread.c @@ -3130,7 +3130,6 @@ static const struct sym_fns aout_sym_fns = NULL, default_symfile_relocate, /* Relocate a debug section. */ NULL, /* sym_probe_fns */ - &psym_functions }; void _initialize_dbxread (); diff --git a/gdb/elfread.c b/gdb/elfread.c index 439f5cc..3ba7221 100644 --- a/gdb/elfread.c +++ b/gdb/elfread.c @@ -54,8 +54,6 @@ #include "dwarf2/public.h" /* Forward declarations. */ -extern const struct sym_fns elf_sym_fns_gdb_index; -extern const struct sym_fns elf_sym_fns_debug_names; extern const struct sym_fns elf_sym_fns_lazy_psyms; /* The struct elfinfo is available only during ELF symbol table and @@ -1272,10 +1270,10 @@ elf_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags) switch (index_kind) { case dw_index_kind::GDB_INDEX: - objfile_set_sym_fns (objfile, &elf_sym_fns_gdb_index); + objfile->qf = &dwarf2_gdb_index_functions; break; case dw_index_kind::DEBUG_NAMES: - objfile_set_sym_fns (objfile, &elf_sym_fns_debug_names); + objfile->qf = &dwarf2_debug_names_functions; break; } } @@ -1437,7 +1435,6 @@ static const struct sym_fns elf_sym_fns = NULL, default_symfile_relocate, /* Relocate a debug section. */ &elf_probe_fns, /* sym_probe_fns */ - &psym_functions }; /* The same as elf_sym_fns, but not registered and lazily reads @@ -1455,41 +1452,6 @@ const struct sym_fns elf_sym_fns_lazy_psyms = NULL, default_symfile_relocate, /* Relocate a debug section. */ &elf_probe_fns, /* sym_probe_fns */ - &psym_functions -}; - -/* The same as elf_sym_fns, but not registered and uses the - DWARF-specific GNU index rather than psymtab. */ -const struct sym_fns elf_sym_fns_gdb_index = -{ - elf_new_init, /* init anything gbl to entire symab */ - elf_symfile_init, /* read initial info, setup for sym_red() */ - elf_symfile_read, /* read a symbol file into symtab */ - NULL, /* sym_read_psymbols */ - elf_symfile_finish, /* finished with file, cleanup */ - default_symfile_offsets, /* Translate ext. to int. relocation */ - elf_symfile_segments, /* Get segment information from a file. */ - NULL, - default_symfile_relocate, /* Relocate a debug section. */ - &elf_probe_fns, /* sym_probe_fns */ - &dwarf2_gdb_index_functions -}; - -/* The same as elf_sym_fns, but not registered and uses the - DWARF-specific .debug_names index rather than psymtab. */ -const struct sym_fns elf_sym_fns_debug_names = -{ - elf_new_init, /* init anything gbl to entire symab */ - elf_symfile_init, /* read initial info, setup for sym_red() */ - elf_symfile_read, /* read a symbol file into symtab */ - NULL, /* sym_read_psymbols */ - elf_symfile_finish, /* finished with file, cleanup */ - default_symfile_offsets, /* Translate ext. to int. relocation */ - elf_symfile_segments, /* Get segment information from a file. */ - NULL, - default_symfile_relocate, /* Relocate a debug section. */ - &elf_probe_fns, /* sym_probe_fns */ - &dwarf2_debug_names_functions }; /* STT_GNU_IFUNC resolver vector to be installed to gnu_ifunc_fns_p. */ diff --git a/gdb/machoread.c b/gdb/machoread.c index ff50ae5..44baaa2 100644 --- a/gdb/machoread.c +++ b/gdb/machoread.c @@ -958,7 +958,6 @@ static const struct sym_fns macho_sym_fns = { NULL, macho_symfile_relocate, /* Relocate a debug section. */ NULL, /* sym_get_probes */ - &psym_functions }; void _initialize_machoread (); diff --git a/gdb/mipsread.c b/gdb/mipsread.c index 052b31c..3f0697b 100644 --- a/gdb/mipsread.c +++ b/gdb/mipsread.c @@ -376,7 +376,6 @@ static const struct sym_fns ecoff_sym_fns = NULL, default_symfile_relocate, /* Relocate a debug section. */ NULL, /* sym_probe_fns */ - &psym_functions }; void _initialize_mipsread (); diff --git a/gdb/objfiles.h b/gdb/objfiles.h index c55f0f1..8d4a23a 100644 --- a/gdb/objfiles.h +++ b/gdb/objfiles.h @@ -677,6 +677,10 @@ public: const struct sym_fns *sf = nullptr; + /* The "quick" (aka partial) symbol functions for this symbol + reader. */ + const struct quick_symbol_functions *qf = nullptr; + /* Per objfile data-pointers required by other GDB modules. */ REGISTRY_FIELDS {}; diff --git a/gdb/psymtab.c b/gdb/psymtab.c index 94b5acd..8c02fa2 100644 --- a/gdb/psymtab.c +++ b/gdb/psymtab.c @@ -84,7 +84,8 @@ require_partial_symbols (struct objfile *objfile, bool verbose) { objfile->flags |= OBJF_PSYMTABS_READ; - if (objfile->sf->sym_read_psymbols) + if (objfile->sf != nullptr + && objfile->sf->sym_read_psymbols) { if (verbose) printf_filtered (_("Reading symbols from %s...\n"), diff --git a/gdb/symfile-debug.c b/gdb/symfile-debug.c index 419f24d..da3439d 100644 --- a/gdb/symfile-debug.c +++ b/gdb/symfile-debug.c @@ -84,8 +84,8 @@ objfile::has_partial_symbols () && sf != nullptr && sf->sym_read_psymbols != NULL) retval = true; - else if (sf != nullptr) - retval = sf->qf->has_symbols (this); + else if (qf != nullptr) + retval = qf->has_symbols (this); if (debug_symfile) fprintf_filtered (gdb_stdlog, "qf->has_symbols (%s) = %d\n", @@ -103,8 +103,8 @@ objfile::find_last_source_symtab () fprintf_filtered (gdb_stdlog, "qf->find_last_source_symtab (%s)\n", objfile_debug_name (this)); - if (sf != nullptr) - retval = sf->qf->find_last_source_symtab (this); + if (qf != nullptr) + retval = qf->find_last_source_symtab (this); if (debug_symfile) fprintf_filtered (gdb_stdlog, "qf->find_last_source_symtab (...) = %s\n", @@ -120,8 +120,8 @@ objfile::forget_cached_source_info () fprintf_filtered (gdb_stdlog, "qf->forget_cached_source_info (%s)\n", objfile_debug_name (this)); - if (sf != nullptr) - sf->qf->forget_cached_source_info (this); + if (qf != nullptr) + qf->forget_cached_source_info (this); } bool @@ -138,8 +138,8 @@ objfile::map_symtabs_matching_filename host_address_to_string (&callback)); bool retval = false; - if (sf != nullptr) - retval = (sf->qf->map_symtabs_matching_filename + if (qf != nullptr) + retval = (qf->map_symtabs_matching_filename (this, name, real_path, callback)); if (debug_symfile) @@ -161,8 +161,8 @@ objfile::lookup_symbol (block_enum kind, const char *name, domain_enum domain) objfile_debug_name (this), kind, name, domain_name (domain)); - if (sf != nullptr) - retval = sf->qf->lookup_symbol (this, kind, name, domain); + if (qf != nullptr) + retval = qf->lookup_symbol (this, kind, name, domain); if (debug_symfile) fprintf_filtered (gdb_stdlog, "qf->lookup_symbol (...) = %s\n", @@ -180,8 +180,8 @@ objfile::print_stats () fprintf_filtered (gdb_stdlog, "qf->print_stats (%s)\n", objfile_debug_name (this)); - if (sf != nullptr) - sf->qf->print_stats (this); + if (qf != nullptr) + qf->print_stats (this); } void @@ -191,8 +191,8 @@ objfile::dump () fprintf_filtered (gdb_stdlog, "qf->dump (%s)\n", objfile_debug_name (this)); - if (sf != nullptr) - sf->qf->dump (this); + if (qf != nullptr) + qf->dump (this); } void @@ -203,8 +203,8 @@ objfile::expand_symtabs_for_function (const char *func_name) "qf->expand_symtabs_for_function (%s, \"%s\")\n", objfile_debug_name (this), func_name); - if (sf != nullptr) - sf->qf->expand_symtabs_for_function (this, func_name); + if (qf != nullptr) + qf->expand_symtabs_for_function (this, func_name); } void @@ -214,8 +214,8 @@ objfile::expand_all_symtabs () fprintf_filtered (gdb_stdlog, "qf->expand_all_symtabs (%s)\n", objfile_debug_name (this)); - if (sf != nullptr) - sf->qf->expand_all_symtabs (this); + if (qf != nullptr) + qf->expand_all_symtabs (this); } void @@ -226,8 +226,8 @@ objfile::expand_symtabs_with_fullname (const char *fullname) "qf->expand_symtabs_with_fullname (%s, \"%s\")\n", objfile_debug_name (this), fullname); - if (sf != nullptr) - sf->qf->expand_symtabs_with_fullname (this, fullname); + if (qf != nullptr) + qf->expand_symtabs_with_fullname (this, fullname); } void @@ -244,9 +244,9 @@ objfile::map_matching_symbols domain_name (domain), global, host_address_to_string (ordered_compare)); - if (sf != nullptr) - sf->qf->map_matching_symbols (this, name, domain, global, - callback, ordered_compare); + if (qf != nullptr) + qf->map_matching_symbols (this, name, domain, global, + callback, ordered_compare); } void @@ -266,9 +266,9 @@ objfile::expand_symtabs_matching host_address_to_string (&expansion_notify), search_domain_name (kind)); - if (sf != nullptr) - sf->qf->expand_symtabs_matching (this, file_matcher, lookup_name, - symbol_matcher, expansion_notify, kind); + if (qf != nullptr) + qf->expand_symtabs_matching (this, file_matcher, lookup_name, + symbol_matcher, expansion_notify, kind); } struct compunit_symtab * @@ -288,10 +288,9 @@ objfile::find_pc_sect_compunit_symtab (struct bound_minimal_symbol msymbol, host_address_to_string (section), warn_if_readin); - if (sf != nullptr) - retval - = sf->qf->find_pc_sect_compunit_symtab (this, msymbol, pc, section, - warn_if_readin); + if (qf != nullptr) + retval = qf->find_pc_sect_compunit_symtab (this, msymbol, pc, section, + warn_if_readin); if (debug_symfile) fprintf_filtered (gdb_stdlog, @@ -315,8 +314,8 @@ objfile::map_symbol_filenames (symbol_filename_ftype *fun, void *data, host_address_to_string (data), need_fullname); - if (sf != nullptr) - sf->qf->map_symbol_filenames (this, fun, data, need_fullname); + if (qf != nullptr) + qf->map_symbol_filenames (this, fun, data, need_fullname); } struct compunit_symtab * @@ -329,8 +328,8 @@ objfile::find_compunit_symtab_by_address (CORE_ADDR address) hex_string (address)); struct compunit_symtab *result = NULL; - if (sf != nullptr && sf->qf->find_compunit_symtab_by_address != NULL) - result = sf->qf->find_compunit_symtab_by_address (this, address); + if (qf != nullptr && qf->find_compunit_symtab_by_address != NULL) + result = qf->find_compunit_symtab_by_address (this, address); if (debug_symfile) fprintf_filtered (gdb_stdlog, @@ -349,9 +348,9 @@ objfile::lookup_global_symbol_language (const char *name, { enum language result = language_unknown; - if (sf != nullptr && sf->qf->lookup_global_symbol_language != nullptr) - result = sf->qf->lookup_global_symbol_language (this, name, domain, - symbol_found_p); + if (qf != nullptr && qf->lookup_global_symbol_language != nullptr) + result = qf->lookup_global_symbol_language (this, name, domain, + symbol_found_p); else *symbol_found_p = false; @@ -516,7 +515,6 @@ static const struct sym_fns debug_sym_fns = debug_sym_read_linetable, debug_sym_relocate, &debug_sym_probe_fns, - nullptr }; /* Install the debugging versions of the symfile functions for OBJFILE. @@ -555,7 +553,6 @@ install_symfile_debug_logging (struct objfile *objfile) COPY_SF_PTR (real_sf, debug_data, sym_relocate, debug_sym_relocate); if (real_sf->sym_probe_fns) debug_data->debug_sf.sym_probe_fns = &debug_sym_probe_fns; - debug_data->debug_sf.qf = real_sf->qf; #undef COPY_SF_PTR diff --git a/gdb/symfile.c b/gdb/symfile.c index ac9adc8..d56d623 100644 --- a/gdb/symfile.c +++ b/gdb/symfile.c @@ -904,6 +904,7 @@ syms_from_objfile_1 (struct objfile *objfile, const int mainline = add_flags & SYMFILE_MAINLINE; objfile_set_sym_fns (objfile, find_sym_fns (objfile->obfd)); + objfile->qf = &psym_functions; if (objfile->sf == NULL) { @@ -2554,6 +2555,7 @@ reread_symbols (void) based on whether .gdb_index is present, and we need it to start over. PR symtab/15885 */ objfile_set_sym_fns (objfile, find_sym_fns (objfile->obfd)); + objfile->qf = &psym_functions; build_objfile_section_table (objfile); diff --git a/gdb/symfile.h b/gdb/symfile.h index c87bbed..2c37f88 100644 --- a/gdb/symfile.h +++ b/gdb/symfile.h @@ -180,10 +180,6 @@ struct sym_fns /* If non-NULL, this objfile has probe support, and all the probe functions referred to here will be non-NULL. */ const struct sym_probe_fns *sym_probe_fns; - - /* The "quick" (aka partial) symbol functions for this symbol - reader. */ - const struct quick_symbol_functions *qf; }; extern section_addr_info diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c index 612ffb1..e0e7a8f 100644 --- a/gdb/xcoffread.c +++ b/gdb/xcoffread.c @@ -3006,7 +3006,6 @@ static const struct sym_fns xcoff_sym_fns = aix_process_linenos, default_symfile_relocate, /* Relocate a debug section. */ NULL, /* sym_probe_fns */ - &psym_functions }; /* Same as xcoff_get_n_import_files, but for core files. */ |