summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog31
-rw-r--r--gdb/coffread.c1
-rw-r--r--gdb/dbxread.c1
-rw-r--r--gdb/elfread.c42
-rw-r--r--gdb/machoread.c1
-rw-r--r--gdb/mipsread.c1
-rw-r--r--gdb/objfiles.h4
-rw-r--r--gdb/psymtab.c3
-rw-r--r--gdb/symfile-debug.c75
-rw-r--r--gdb/symfile.c2
-rw-r--r--gdb/symfile.h4
-rw-r--r--gdb/xcoffread.c1
12 files changed, 77 insertions, 89 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 82a82c9795c..55487d416b6 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 badcb5a6084..676deec8cbe 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 6450cd32cb0..9003822a0f1 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 439f5cc29a0..3ba7221bfc9 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 ff50ae54f2a..44baaa26f65 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 052b31c70db..3f0697b9150 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 c55f0f174fc..8d4a23ae044 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 94b5acdea54..8c02fa253dc 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 419f24d2240..da3439d7928 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 ac9adc816a4..d56d623c588 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 c87bbed83d8..2c37f88d763 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 612ffb178c5..e0e7a8f0f5e 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. */