Introduce method wrappers for quick_symbol_functions

This introduces wrappers for each function in quick_symbol_functions.
The wrappers are methods on objfile, and are defined in
symfile-debug.c, so that they can use the symfile_debug variable.
Places that call the quick functions are all updated to call these new
wrapper methods.

gdb/ChangeLog
2021-03-20  Tom Tromey  <tom@tromey.com>

	* symtab.c (iterate_over_symtabs, expand_symtab_containing_pc)
	(lookup_symbol_via_quick_fns, find_quick_global_symbol_language)
	(basic_lookup_transparent_type_quick)
	(find_pc_sect_compunit_symtab, find_symbol_at_address)
	(find_line_symtab, global_symbol_searcher::expand_symtabs):
	Update.
	* symmisc.c (print_objfile_statistics, dump_objfile)
	(maintenance_expand_symtabs): Update.
	* symfile.c (symbol_file_add_with_addrs)
	(expand_symtabs_matching, map_symbol_filenames): 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): New methods.
	(debug_sym_quick_functions): Remove.
	(debug_sym_fns, install_symfile_debug_logging): Update.
	* source.c (forget_cached_source_info_for_objfile)
	(select_source_symtab): Update.
	* objfiles.h (struct objfile): Add methods corresponding to
	quick_symbol_functions.
	* objfiles.c (objfile::has_partial_symbols): Move to
	symfile-debug.c.
	* linespec.c (iterate_over_all_matching_symtabs): Update.
	* cp-support.c (add_symbol_overload_list_qualified): Update.
	* ada-lang.c (add_nonlocal_symbols): Update.
This commit is contained in:
Tom Tromey 2021-03-20 17:23:40 -06:00
parent fae2120ba0
commit 4d080b4687
11 changed files with 363 additions and 363 deletions

View File

@ -1,3 +1,41 @@
2021-03-20 Tom Tromey <tom@tromey.com>
* symtab.c (iterate_over_symtabs, expand_symtab_containing_pc)
(lookup_symbol_via_quick_fns, find_quick_global_symbol_language)
(basic_lookup_transparent_type_quick)
(find_pc_sect_compunit_symtab, find_symbol_at_address)
(find_line_symtab, global_symbol_searcher::expand_symtabs):
Update.
* symmisc.c (print_objfile_statistics, dump_objfile)
(maintenance_expand_symtabs): Update.
* symfile.c (symbol_file_add_with_addrs)
(expand_symtabs_matching, map_symbol_filenames): 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): New methods.
(debug_sym_quick_functions): Remove.
(debug_sym_fns, install_symfile_debug_logging): Update.
* source.c (forget_cached_source_info_for_objfile)
(select_source_symtab): Update.
* objfiles.h (struct objfile): Add methods corresponding to
quick_symbol_functions.
* objfiles.c (objfile::has_partial_symbols): Move to
symfile-debug.c.
* linespec.c (iterate_over_all_matching_symtabs): Update.
* cp-support.c (add_symbol_overload_list_qualified): Update.
* ada-lang.c (add_nonlocal_symbols): Update.
2021-03-20 Tom Tromey <tom@tromey.com> 2021-03-20 Tom Tromey <tom@tromey.com>
* objfiles.h (struct objfile) <has_partial_symbols>: Return bool. * objfiles.h (struct objfile) <has_partial_symbols>: Return bool.

View File

@ -5203,11 +5203,8 @@ add_nonlocal_symbols (std::vector<struct block_symbol> &result,
{ {
data.objfile = objfile; data.objfile = objfile;
if (objfile->sf != nullptr) objfile->map_matching_symbols (lookup_name, domain, global, callback,
objfile->sf->qf->map_matching_symbols (objfile, lookup_name, is_wild_match ? NULL : compare_names);
domain, global, callback,
(is_wild_match
? NULL : compare_names));
for (compunit_symtab *cu : objfile->compunits ()) for (compunit_symtab *cu : objfile->compunits ())
{ {
@ -5229,10 +5226,8 @@ add_nonlocal_symbols (std::vector<struct block_symbol> &result,
for (objfile *objfile : current_program_space->objfiles ()) for (objfile *objfile : current_program_space->objfiles ())
{ {
data.objfile = objfile; data.objfile = objfile;
if (objfile->sf != nullptr) objfile->map_matching_symbols (name1, domain, global, callback,
objfile->sf->qf->map_matching_symbols (objfile, name1, compare_names);
domain, global, callback,
compare_names);
} }
} }
} }

View File

@ -1452,10 +1452,7 @@ add_symbol_overload_list_qualified (const char *func_name,
matching FUNC_NAME. Make sure we read that symbol table in. */ matching FUNC_NAME. Make sure we read that symbol table in. */
for (objfile *objf : current_program_space->objfiles ()) for (objfile *objf : current_program_space->objfiles ())
{ objf->expand_symtabs_for_function (func_name);
if (objf->sf)
objf->sf->qf->expand_symtabs_for_function (objf, func_name);
}
/* Search upwards from currently selected frame (so that we can /* Search upwards from currently selected frame (so that we can
complete on local vars. */ complete on local vars. */

View File

@ -1168,12 +1168,8 @@ iterate_over_all_matching_symtabs
for (objfile *objfile : current_program_space->objfiles ()) for (objfile *objfile : current_program_space->objfiles ())
{ {
if (objfile->sf) objfile->expand_symtabs_matching (NULL, &lookup_name, NULL, NULL,
objfile->sf->qf->expand_symtabs_matching (objfile, search_domain);
NULL,
&lookup_name,
NULL, NULL,
search_domain);
for (compunit_symtab *cu : objfile->compunits ()) for (compunit_symtab *cu : objfile->compunits ())
{ {

View File

@ -810,25 +810,6 @@ objfile_rebase (struct objfile *objfile, CORE_ADDR slide)
breakpoint_re_set (); breakpoint_re_set ();
} }
/* See objfiles.h. */
bool
objfile::has_partial_symbols ()
{
if (!sf)
return false;
/* If we have not read psymbols, but we have a function capable of reading
them, then that is an indication that they are in fact available. Without
this function the symbols may have been already read in but they also may
not be present in this objfile. */
if ((flags & OBJF_PSYMTABS_READ) == 0
&& sf->sym_read_psymbols != NULL)
return true;
return sf->qf->has_symbols (this);
}
/* Return non-zero if OBJFILE has full symbols. */ /* Return non-zero if OBJFILE has full symbols. */
int int

View File

@ -415,8 +415,8 @@ private:
GDB typically reads symbols twice -- first an initial scan which just GDB typically reads symbols twice -- first an initial scan which just
reads "partial symbols"; these are partial information for the reads "partial symbols"; these are partial information for the
static/global symbols in a symbol file. When later looking up symbols, static/global symbols in a symbol file. When later looking up
objfile->sf->qf->lookup_symbol is used to check if we only have a partial symbols, lookup_symbol is used to check if we only have a partial
symbol and if so, read and expand the full compunit. */ symbol and if so, read and expand the full compunit. */
struct objfile struct objfile
@ -552,6 +552,71 @@ public:
bool has_partial_symbols (); bool has_partial_symbols ();
/* See quick_symbol_functions. */
struct symtab *find_last_source_symtab ();
/* See quick_symbol_functions. */
void forget_cached_source_info ();
/* See quick_symbol_functions. */
bool map_symtabs_matching_filename
(const char *name, const char *real_path,
gdb::function_view<bool (symtab *)> callback);
/* See quick_symbol_functions. */
struct compunit_symtab *lookup_symbol (block_enum kind, const char *name,
domain_enum domain);
/* See quick_symbol_functions. */
void print_stats ();
/* See quick_symbol_functions. */
void dump ();
/* See quick_symbol_functions. */
void expand_symtabs_for_function (const char *func_name);
/* See quick_symbol_functions. */
void expand_all_symtabs ();
/* See quick_symbol_functions. */
void expand_symtabs_with_fullname (const char *fullname);
/* See quick_symbol_functions. */
void map_matching_symbols
(const lookup_name_info &name, domain_enum domain,
int global,
gdb::function_view<symbol_found_callback_ftype> callback,
symbol_compare_ftype *ordered_compare);
/* See quick_symbol_functions. */
void expand_symtabs_matching
(gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher,
const lookup_name_info *lookup_name,
gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
enum search_domain kind);
/* See quick_symbol_functions. */
struct compunit_symtab *find_pc_sect_compunit_symtab
(struct bound_minimal_symbol msymbol,
CORE_ADDR pc,
struct obj_section *section,
int warn_if_readin);
/* See quick_symbol_functions. */
void map_symbol_filenames (symbol_filename_ftype *fun, void *data,
int need_fullname);
/* See quick_symbol_functions. */
struct compunit_symtab *find_compunit_symtab_by_address (CORE_ADDR address);
/* See quick_symbol_functions. */
enum language lookup_global_symbol_language (const char *name,
domain_enum domain,
bool *symbol_found_p);
/* The object file's original name as specified by the user, /* The object file's original name as specified by the user,
made absolute, and tilde-expanded. However, it is not canonicalized made absolute, and tilde-expanded. However, it is not canonicalized
(i.e., it has not been passed through gdb_realpath). (i.e., it has not been passed through gdb_realpath).

View File

@ -342,8 +342,7 @@ select_source_symtab (struct symtab *s)
for (objfile *objfile : current_program_space->objfiles ()) for (objfile *objfile : current_program_space->objfiles ())
{ {
if (objfile->sf) s = objfile->find_last_source_symtab ();
s = objfile->sf->qf->find_last_source_symtab (objfile);
if (s) if (s)
new_symtab = s; new_symtab = s;
} }
@ -417,8 +416,7 @@ forget_cached_source_info_for_objfile (struct objfile *objfile)
} }
} }
if (objfile->sf) objfile->forget_cached_source_info ();
objfile->sf->qf->forget_cached_source_info (objfile);
} }
/* See source.h. */ /* See source.h. */

View File

@ -68,312 +68,296 @@ debug_symtab_name (struct symtab *symtab)
return symtab_to_filename_for_display (symtab); return symtab_to_filename_for_display (symtab);
} }
/* Debugging version of struct quick_symbol_functions. */
static bool /* See objfiles.h. */
debug_qf_has_symbols (struct objfile *objfile)
bool
objfile::has_partial_symbols ()
{ {
const struct debug_sym_fns_data *debug_data bool retval = false;
= symfile_debug_objfile_data_key.get (objfile);
bool retval;
retval = debug_data->real_sf->qf->has_symbols (objfile); /* If we have not read psymbols, but we have a function capable of reading
them, then that is an indication that they are in fact available. Without
this function the symbols may have been already read in but they also may
not be present in this objfile. */
if ((flags & OBJF_PSYMTABS_READ) == 0
&& sf != nullptr
&& sf->sym_read_psymbols != NULL)
retval = true;
else if (sf != nullptr)
retval = sf->qf->has_symbols (this);
fprintf_filtered (gdb_stdlog, "qf->has_symbols (%s) = %d\n", if (debug_symfile)
objfile_debug_name (objfile), retval); fprintf_filtered (gdb_stdlog, "qf->has_symbols (%s) = %d\n",
objfile_debug_name (this), retval);
return retval; return retval;
} }
static struct symtab * struct symtab *
debug_qf_find_last_source_symtab (struct objfile *objfile) objfile::find_last_source_symtab ()
{ {
const struct debug_sym_fns_data *debug_data struct symtab *retval = nullptr;
= symfile_debug_objfile_data_key.get (objfile);
struct symtab *retval;
fprintf_filtered (gdb_stdlog, "qf->find_last_source_symtab (%s)\n", if (debug_symfile)
objfile_debug_name (objfile)); fprintf_filtered (gdb_stdlog, "qf->find_last_source_symtab (%s)\n",
objfile_debug_name (this));
retval = debug_data->real_sf->qf->find_last_source_symtab (objfile); if (sf != nullptr)
retval = sf->qf->find_last_source_symtab (this);
fprintf_filtered (gdb_stdlog, "qf->find_last_source_symtab (...) = %s\n", if (debug_symfile)
retval ? debug_symtab_name (retval) : "NULL"); fprintf_filtered (gdb_stdlog, "qf->find_last_source_symtab (...) = %s\n",
retval ? debug_symtab_name (retval) : "NULL");
return retval; return retval;
} }
static void void
debug_qf_forget_cached_source_info (struct objfile *objfile) objfile::forget_cached_source_info ()
{ {
const struct debug_sym_fns_data *debug_data if (debug_symfile)
= symfile_debug_objfile_data_key.get (objfile); fprintf_filtered (gdb_stdlog, "qf->forget_cached_source_info (%s)\n",
objfile_debug_name (this));
fprintf_filtered (gdb_stdlog, "qf->forget_cached_source_info (%s)\n", if (sf != nullptr)
objfile_debug_name (objfile)); sf->qf->forget_cached_source_info (this);
debug_data->real_sf->qf->forget_cached_source_info (objfile);
} }
static bool bool
debug_qf_map_symtabs_matching_filename objfile::map_symtabs_matching_filename
(struct objfile *objfile, const char *name, const char *real_path, (const char *name, const char *real_path,
gdb::function_view<bool (symtab *)> callback) gdb::function_view<bool (symtab *)> callback)
{ {
const struct debug_sym_fns_data *debug_data if (debug_symfile)
= symfile_debug_objfile_data_key.get (objfile); fprintf_filtered (gdb_stdlog,
"qf->map_symtabs_matching_filename (%s, \"%s\", "
"\"%s\", %s)\n",
objfile_debug_name (this), name,
real_path ? real_path : NULL,
host_address_to_string (&callback));
fprintf_filtered (gdb_stdlog, bool retval = false;
"qf->map_symtabs_matching_filename (%s, \"%s\", \"%s\", %s)\n", if (sf != nullptr)
objfile_debug_name (objfile), name, retval = (sf->qf->map_symtabs_matching_filename
real_path ? real_path : NULL, (this, name, real_path, callback));
host_address_to_string (&callback));
bool retval = (debug_data->real_sf->qf->map_symtabs_matching_filename if (debug_symfile)
(objfile, name, real_path, callback)); fprintf_filtered (gdb_stdlog,
"qf->map_symtabs_matching_filename (...) = %d\n",
fprintf_filtered (gdb_stdlog, retval);
"qf->map_symtabs_matching_filename (...) = %d\n",
retval);
return retval; return retval;
} }
static struct compunit_symtab * struct compunit_symtab *
debug_qf_lookup_symbol (struct objfile *objfile, block_enum kind, objfile::lookup_symbol (block_enum kind, const char *name, domain_enum domain)
const char *name, domain_enum domain)
{ {
const struct debug_sym_fns_data *debug_data struct compunit_symtab *retval = nullptr;
= symfile_debug_objfile_data_key.get (objfile);
struct compunit_symtab *retval;
fprintf_filtered (gdb_stdlog, if (debug_symfile)
"qf->lookup_symbol (%s, %d, \"%s\", %s)\n", fprintf_filtered (gdb_stdlog,
objfile_debug_name (objfile), kind, name, "qf->lookup_symbol (%s, %d, \"%s\", %s)\n",
domain_name (domain)); objfile_debug_name (this), kind, name,
domain_name (domain));
retval = debug_data->real_sf->qf->lookup_symbol (objfile, kind, name, if (sf != nullptr)
domain); retval = sf->qf->lookup_symbol (this, kind, name, domain);
fprintf_filtered (gdb_stdlog, "qf->lookup_symbol (...) = %s\n", if (debug_symfile)
retval fprintf_filtered (gdb_stdlog, "qf->lookup_symbol (...) = %s\n",
? debug_symtab_name (compunit_primary_filetab (retval)) retval
: "NULL"); ? debug_symtab_name (compunit_primary_filetab (retval))
: "NULL");
return retval; return retval;
} }
static void void
debug_qf_print_stats (struct objfile *objfile) objfile::print_stats ()
{ {
const struct debug_sym_fns_data *debug_data if (debug_symfile)
= symfile_debug_objfile_data_key.get (objfile); fprintf_filtered (gdb_stdlog, "qf->print_stats (%s)\n",
objfile_debug_name (this));
fprintf_filtered (gdb_stdlog, "qf->print_stats (%s)\n", if (sf != nullptr)
objfile_debug_name (objfile)); sf->qf->print_stats (this);
debug_data->real_sf->qf->print_stats (objfile);
} }
static void void
debug_qf_dump (struct objfile *objfile) objfile::dump ()
{ {
const struct debug_sym_fns_data *debug_data if (debug_symfile)
= symfile_debug_objfile_data_key.get (objfile); fprintf_filtered (gdb_stdlog, "qf->dump (%s)\n",
objfile_debug_name (this));
fprintf_filtered (gdb_stdlog, "qf->dump (%s)\n", if (sf != nullptr)
objfile_debug_name (objfile)); sf->qf->dump (this);
debug_data->real_sf->qf->dump (objfile);
} }
static void void
debug_qf_expand_symtabs_for_function (struct objfile *objfile, objfile::expand_symtabs_for_function (const char *func_name)
const char *func_name)
{ {
const struct debug_sym_fns_data *debug_data if (debug_symfile)
= symfile_debug_objfile_data_key.get (objfile); fprintf_filtered (gdb_stdlog,
"qf->expand_symtabs_for_function (%s, \"%s\")\n",
objfile_debug_name (this), func_name);
fprintf_filtered (gdb_stdlog, if (sf != nullptr)
"qf->expand_symtabs_for_function (%s, \"%s\")\n", sf->qf->expand_symtabs_for_function (this, func_name);
objfile_debug_name (objfile), func_name);
debug_data->real_sf->qf->expand_symtabs_for_function (objfile, func_name);
} }
static void void
debug_qf_expand_all_symtabs (struct objfile *objfile) objfile::expand_all_symtabs ()
{ {
const struct debug_sym_fns_data *debug_data if (debug_symfile)
= symfile_debug_objfile_data_key.get (objfile); fprintf_filtered (gdb_stdlog, "qf->expand_all_symtabs (%s)\n",
objfile_debug_name (this));
fprintf_filtered (gdb_stdlog, "qf->expand_all_symtabs (%s)\n", if (sf != nullptr)
objfile_debug_name (objfile)); sf->qf->expand_all_symtabs (this);
debug_data->real_sf->qf->expand_all_symtabs (objfile);
} }
static void void
debug_qf_expand_symtabs_with_fullname (struct objfile *objfile, objfile::expand_symtabs_with_fullname (const char *fullname)
const char *fullname)
{ {
const struct debug_sym_fns_data *debug_data if (debug_symfile)
= symfile_debug_objfile_data_key.get (objfile); fprintf_filtered (gdb_stdlog,
"qf->expand_symtabs_with_fullname (%s, \"%s\")\n",
objfile_debug_name (this), fullname);
fprintf_filtered (gdb_stdlog, if (sf != nullptr)
"qf->expand_symtabs_with_fullname (%s, \"%s\")\n", sf->qf->expand_symtabs_with_fullname (this, fullname);
objfile_debug_name (objfile), fullname);
debug_data->real_sf->qf->expand_symtabs_with_fullname (objfile, fullname);
} }
static void void
debug_qf_map_matching_symbols objfile::map_matching_symbols
(struct objfile *objfile, (const lookup_name_info &name, domain_enum domain,
const lookup_name_info &name, domain_enum domain,
int global, int global,
gdb::function_view<symbol_found_callback_ftype> callback, gdb::function_view<symbol_found_callback_ftype> callback,
symbol_compare_ftype *ordered_compare) symbol_compare_ftype *ordered_compare)
{ {
const struct debug_sym_fns_data *debug_data if (debug_symfile)
= symfile_debug_objfile_data_key.get (objfile); fprintf_filtered (gdb_stdlog,
"qf->map_matching_symbols (%s, %s, %d, %s)\n",
objfile_debug_name (this),
domain_name (domain), global,
host_address_to_string (ordered_compare));
fprintf_filtered (gdb_stdlog, if (sf != nullptr)
"qf->map_matching_symbols (%s, %s, %d, %s)\n", sf->qf->map_matching_symbols (this, name, domain, global,
objfile_debug_name (objfile), callback, ordered_compare);
domain_name (domain), global,
host_address_to_string (ordered_compare));
debug_data->real_sf->qf->map_matching_symbols (objfile, name,
domain, global,
callback,
ordered_compare);
} }
static void void
debug_qf_expand_symtabs_matching objfile::expand_symtabs_matching
(struct objfile *objfile, (gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher,
gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher,
const lookup_name_info *lookup_name, const lookup_name_info *lookup_name,
gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher, gdb::function_view<expand_symtabs_symbol_matcher_ftype> symbol_matcher,
gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify, gdb::function_view<expand_symtabs_exp_notify_ftype> expansion_notify,
enum search_domain kind) enum search_domain kind)
{ {
const struct debug_sym_fns_data *debug_data if (debug_symfile)
= symfile_debug_objfile_data_key.get (objfile); fprintf_filtered (gdb_stdlog,
"qf->expand_symtabs_matching (%s, %s, %s, %s, %s)\n",
objfile_debug_name (this),
host_address_to_string (&file_matcher),
host_address_to_string (&symbol_matcher),
host_address_to_string (&expansion_notify),
search_domain_name (kind));
fprintf_filtered (gdb_stdlog, if (sf != nullptr)
"qf->expand_symtabs_matching (%s, %s, %s, %s, %s)\n", sf->qf->expand_symtabs_matching (this, file_matcher, lookup_name,
objfile_debug_name (objfile), symbol_matcher, expansion_notify, kind);
host_address_to_string (&file_matcher),
host_address_to_string (&symbol_matcher),
host_address_to_string (&expansion_notify),
search_domain_name (kind));
debug_data->real_sf->qf->expand_symtabs_matching (objfile,
file_matcher,
lookup_name,
symbol_matcher,
expansion_notify,
kind);
} }
static struct compunit_symtab * struct compunit_symtab *
debug_qf_find_pc_sect_compunit_symtab (struct objfile *objfile, objfile::find_pc_sect_compunit_symtab (struct bound_minimal_symbol msymbol,
struct bound_minimal_symbol msymbol,
CORE_ADDR pc, CORE_ADDR pc,
struct obj_section *section, struct obj_section *section,
int warn_if_readin) int warn_if_readin)
{ {
const struct debug_sym_fns_data *debug_data struct compunit_symtab *retval = nullptr;
= symfile_debug_objfile_data_key.get (objfile);
struct compunit_symtab *retval;
fprintf_filtered (gdb_stdlog, if (debug_symfile)
"qf->find_pc_sect_compunit_symtab (%s, %s, %s, %s, %d)\n", fprintf_filtered (gdb_stdlog,
objfile_debug_name (objfile), "qf->find_pc_sect_compunit_symtab (%s, %s, %s, %s, %d)\n",
host_address_to_string (msymbol.minsym), objfile_debug_name (this),
hex_string (pc), host_address_to_string (msymbol.minsym),
host_address_to_string (section), hex_string (pc),
warn_if_readin); host_address_to_string (section),
warn_if_readin);
retval if (sf != nullptr)
= debug_data->real_sf->qf->find_pc_sect_compunit_symtab (objfile, msymbol, retval
pc, section, = sf->qf->find_pc_sect_compunit_symtab (this, msymbol, pc, section,
warn_if_readin); warn_if_readin);
fprintf_filtered (gdb_stdlog, if (debug_symfile)
"qf->find_pc_sect_compunit_symtab (...) = %s\n", fprintf_filtered (gdb_stdlog,
retval "qf->find_pc_sect_compunit_symtab (...) = %s\n",
? debug_symtab_name (compunit_primary_filetab (retval)) retval
: "NULL"); ? debug_symtab_name (compunit_primary_filetab (retval))
: "NULL");
return retval; return retval;
} }
static void void
debug_qf_map_symbol_filenames (struct objfile *objfile, objfile::map_symbol_filenames (symbol_filename_ftype *fun, void *data,
symbol_filename_ftype *fun, void *data,
int need_fullname) int need_fullname)
{ {
const struct debug_sym_fns_data *debug_data if (debug_symfile)
= symfile_debug_objfile_data_key.get (objfile); fprintf_filtered (gdb_stdlog,
fprintf_filtered (gdb_stdlog, "qf->map_symbol_filenames (%s, %s, %s, %d)\n",
"qf->map_symbol_filenames (%s, %s, %s, %d)\n", objfile_debug_name (this),
objfile_debug_name (objfile), host_address_to_string (fun),
host_address_to_string (fun), host_address_to_string (data),
host_address_to_string (data), need_fullname);
need_fullname);
debug_data->real_sf->qf->map_symbol_filenames (objfile, fun, data, if (sf != nullptr)
need_fullname); sf->qf->map_symbol_filenames (this, fun, data, need_fullname);
} }
static struct compunit_symtab * struct compunit_symtab *
debug_qf_find_compunit_symtab_by_address (struct objfile *objfile, objfile::find_compunit_symtab_by_address (CORE_ADDR address)
CORE_ADDR address)
{ {
const struct debug_sym_fns_data *debug_data if (debug_symfile)
= symfile_debug_objfile_data_key.get (objfile); fprintf_filtered (gdb_stdlog,
fprintf_filtered (gdb_stdlog, "qf->find_compunit_symtab_by_address (%s, %s)\n",
"qf->find_compunit_symtab_by_address (%s, %s)\n", objfile_debug_name (this),
objfile_debug_name (objfile), hex_string (address));
hex_string (address));
struct compunit_symtab *result = NULL; struct compunit_symtab *result = NULL;
if (debug_data->real_sf->qf->map_symbol_filenames != NULL) if (sf != nullptr && sf->qf->find_compunit_symtab_by_address != NULL)
result result = sf->qf->find_compunit_symtab_by_address (this, address);
= debug_data->real_sf->qf->find_compunit_symtab_by_address (objfile,
address);
fprintf_filtered (gdb_stdlog, if (debug_symfile)
"qf->find_compunit_symtab_by_address (...) = %s\n", fprintf_filtered (gdb_stdlog,
result "qf->find_compunit_symtab_by_address (...) = %s\n",
? debug_symtab_name (compunit_primary_filetab (result)) result
: "NULL"); ? debug_symtab_name (compunit_primary_filetab (result))
: "NULL");
return result; return result;
} }
static const struct quick_symbol_functions debug_sym_quick_functions = enum language
objfile::lookup_global_symbol_language (const char *name,
domain_enum domain,
bool *symbol_found_p)
{ {
debug_qf_has_symbols, enum language result = language_unknown;
debug_qf_find_last_source_symtab,
debug_qf_forget_cached_source_info, if (sf != nullptr && sf->qf->lookup_global_symbol_language != nullptr)
debug_qf_map_symtabs_matching_filename, result = sf->qf->lookup_global_symbol_language (this, name, domain,
debug_qf_lookup_symbol, symbol_found_p);
NULL, else
debug_qf_print_stats, *symbol_found_p = false;
debug_qf_dump,
debug_qf_expand_symtabs_for_function, return result;
debug_qf_expand_all_symtabs, }
debug_qf_expand_symtabs_with_fullname,
debug_qf_map_matching_symbols,
debug_qf_expand_symtabs_matching,
debug_qf_find_pc_sect_compunit_symtab,
debug_qf_find_compunit_symtab_by_address,
debug_qf_map_symbol_filenames
};
/* Debugging version of struct sym_probe_fns. */ /* Debugging version of struct sym_probe_fns. */
@ -532,7 +516,7 @@ static const struct sym_fns debug_sym_fns =
debug_sym_read_linetable, debug_sym_read_linetable,
debug_sym_relocate, debug_sym_relocate,
&debug_sym_probe_fns, &debug_sym_probe_fns,
&debug_sym_quick_functions nullptr
}; };
/* Install the debugging versions of the symfile functions for OBJFILE. /* Install the debugging versions of the symfile functions for OBJFILE.
@ -571,7 +555,7 @@ install_symfile_debug_logging (struct objfile *objfile)
COPY_SF_PTR (real_sf, debug_data, sym_relocate, debug_sym_relocate); COPY_SF_PTR (real_sf, debug_data, sym_relocate, debug_sym_relocate);
if (real_sf->sym_probe_fns) if (real_sf->sym_probe_fns)
debug_data->debug_sf.sym_probe_fns = &debug_sym_probe_fns; debug_data->debug_sf.sym_probe_fns = &debug_sym_probe_fns;
debug_data->debug_sf.qf = &debug_sym_quick_functions; debug_data->debug_sf.qf = real_sf->qf;
#undef COPY_SF_PTR #undef COPY_SF_PTR

View File

@ -1100,8 +1100,7 @@ symbol_file_add_with_addrs (bfd *abfd, const char *name,
printf_filtered (_("Expanding full symbols from %ps...\n"), printf_filtered (_("Expanding full symbols from %ps...\n"),
styled_string (file_name_style.style (), name)); styled_string (file_name_style.style (), name));
if (objfile->sf) objfile->expand_all_symtabs ();
objfile->sf->qf->expand_all_symtabs (objfile);
} }
/* Note that we only print a message if we have no symbols and have /* Note that we only print a message if we have no symbols and have
@ -3731,13 +3730,10 @@ expand_symtabs_matching
enum search_domain kind) enum search_domain kind)
{ {
for (objfile *objfile : current_program_space->objfiles ()) for (objfile *objfile : current_program_space->objfiles ())
{ objfile->expand_symtabs_matching (file_matcher,
if (objfile->sf) &lookup_name,
objfile->sf->qf->expand_symtabs_matching (objfile, file_matcher, symbol_matcher,
&lookup_name, expansion_notify, kind);
symbol_matcher,
expansion_notify, kind);
}
} }
/* Wrapper around the quick_symbol_functions map_symbol_filenames "method". /* Wrapper around the quick_symbol_functions map_symbol_filenames "method".
@ -3749,11 +3745,7 @@ map_symbol_filenames (symbol_filename_ftype *fun, void *data,
int need_fullname) int need_fullname)
{ {
for (objfile *objfile : current_program_space->objfiles ()) for (objfile *objfile : current_program_space->objfiles ())
{ objfile->map_symbol_filenames (fun, data, need_fullname);
if (objfile->sf)
objfile->sf->qf->map_symbol_filenames (objfile, fun, data,
need_fullname);
}
} }
#if GDB_SELF_TEST #if GDB_SELF_TEST

View File

@ -105,8 +105,7 @@ print_objfile_statistics (void)
if (OBJSTAT (objfile, n_types) > 0) if (OBJSTAT (objfile, n_types) > 0)
printf_filtered (_(" Number of \"types\" defined: %d\n"), printf_filtered (_(" Number of \"types\" defined: %d\n"),
OBJSTAT (objfile, n_types)); OBJSTAT (objfile, n_types));
if (objfile->sf) objfile->print_stats ();
objfile->sf->qf->print_stats (objfile);
i = linetables = 0; i = linetables = 0;
for (compunit_symtab *cu : objfile->compunits ()) for (compunit_symtab *cu : objfile->compunits ())
{ {
@ -153,8 +152,7 @@ dump_objfile (struct objfile *objfile)
printf_filtered (", %d minsyms\n\n", printf_filtered (", %d minsyms\n\n",
objfile->per_bfd->minimal_symbol_count); objfile->per_bfd->minimal_symbol_count);
if (objfile->sf) objfile->dump ();
objfile->sf->qf->dump (objfile);
if (objfile->compunit_symtabs != NULL) if (objfile->compunit_symtabs != NULL)
{ {
@ -963,23 +961,17 @@ maintenance_expand_symtabs (const char *args, int from_tty)
for (struct program_space *pspace : program_spaces) for (struct program_space *pspace : program_spaces)
for (objfile *objfile : pspace->objfiles ()) for (objfile *objfile : pspace->objfiles ())
{ objfile->expand_symtabs_matching
if (objfile->sf) ([&] (const char *filename, bool basenames)
{ {
objfile->sf->qf->expand_symtabs_matching /* KISS: Only apply the regexp to the complete file name. */
(objfile, return (!basenames
[&] (const char *filename, bool basenames) && (regexp == NULL || re_exec (filename)));
{ },
/* KISS: Only apply the regexp to the complete file name. */ NULL,
return (!basenames NULL,
&& (regexp == NULL || re_exec (filename))); NULL,
}, ALL_DOMAIN);
NULL,
NULL,
NULL,
ALL_DOMAIN);
}
}
} }

View File

@ -555,11 +555,8 @@ iterate_over_symtabs (const char *name,
for (objfile *objfile : current_program_space->objfiles ()) for (objfile *objfile : current_program_space->objfiles ())
{ {
if (objfile->sf if (objfile->map_symtabs_matching_filename (name, real_path.get (),
&& objfile->sf->qf->map_symtabs_matching_filename (objfile, callback))
name,
real_path.get (),
callback))
return; return;
} }
} }
@ -1114,11 +1111,8 @@ expand_symtab_containing_pc (CORE_ADDR pc, struct obj_section *section)
for (objfile *objfile : current_program_space->objfiles ()) for (objfile *objfile : current_program_space->objfiles ())
{ {
struct compunit_symtab *cust = NULL; struct compunit_symtab *cust
= objfile->find_pc_sect_compunit_symtab (msymbol, pc, section, 0);
if (objfile->sf)
cust = objfile->sf->qf->find_pc_sect_compunit_symtab (objfile, msymbol,
pc, section, 0);
if (cust) if (cust)
return; return;
} }
@ -2369,9 +2363,6 @@ lookup_symbol_via_quick_fns (struct objfile *objfile,
const struct block *block; const struct block *block;
struct block_symbol result; struct block_symbol result;
if (!objfile->sf)
return {};
if (symbol_lookup_debug > 1) if (symbol_lookup_debug > 1)
{ {
fprintf_unfiltered (gdb_stdlog, fprintf_unfiltered (gdb_stdlog,
@ -2382,7 +2373,7 @@ lookup_symbol_via_quick_fns (struct objfile *objfile,
name, domain_name (domain)); name, domain_name (domain));
} }
cust = objfile->sf->qf->lookup_symbol (objfile, block_index, name, domain); cust = objfile->lookup_symbol (block_index, name, domain);
if (cust == NULL) if (cust == NULL)
{ {
if (symbol_lookup_debug > 1) if (symbol_lookup_debug > 1)
@ -2549,23 +2540,13 @@ lookup_symbol_in_objfile (struct objfile *objfile, enum block_enum block_index,
static enum language static enum language
find_quick_global_symbol_language (const char *name, const domain_enum domain) find_quick_global_symbol_language (const char *name, const domain_enum domain)
{ {
for (objfile *objfile : current_program_space->objfiles ())
{
if (objfile->sf && objfile->sf->qf
&& objfile->sf->qf->lookup_global_symbol_language)
continue;
return language_unknown;
}
for (objfile *objfile : current_program_space->objfiles ()) for (objfile *objfile : current_program_space->objfiles ())
{ {
bool symbol_found_p; bool symbol_found_p;
enum language lang enum language lang
= objfile->sf->qf->lookup_global_symbol_language (objfile, name, domain, = objfile->lookup_global_symbol_language (name, domain, &symbol_found_p);
&symbol_found_p); if (symbol_found_p)
if (!symbol_found_p) return lang;
continue;
return lang;
} }
return language_unknown; return language_unknown;
@ -2749,10 +2730,7 @@ basic_lookup_transparent_type_quick (struct objfile *objfile,
const struct block *block; const struct block *block;
struct symbol *sym; struct symbol *sym;
if (!objfile->sf) cust = objfile->lookup_symbol (block_index, name, STRUCT_DOMAIN);
return NULL;
cust = objfile->sf->qf->lookup_symbol (objfile, block_index, name,
STRUCT_DOMAIN);
if (cust == NULL) if (cust == NULL)
return NULL; return NULL;
@ -2955,16 +2933,15 @@ find_pc_sect_compunit_symtab (CORE_ADDR pc, struct obj_section *section)
/* In order to better support objfiles that contain both /* In order to better support objfiles that contain both
stabs and coff debugging info, we continue on if a psymtab stabs and coff debugging info, we continue on if a psymtab
can't be found. */ can't be found. */
if ((obj_file->flags & OBJF_REORDERED) && obj_file->sf) if ((obj_file->flags & OBJF_REORDERED) != 0)
{ {
struct compunit_symtab *result; struct compunit_symtab *result;
result result
= obj_file->sf->qf->find_pc_sect_compunit_symtab (obj_file, = obj_file->find_pc_sect_compunit_symtab (msymbol,
msymbol, pc,
pc, section,
section, 0);
0);
if (result != NULL) if (result != NULL)
return result; return result;
} }
@ -3005,14 +2982,8 @@ find_pc_sect_compunit_symtab (CORE_ADDR pc, struct obj_section *section)
for (objfile *objf : current_program_space->objfiles ()) for (objfile *objf : current_program_space->objfiles ())
{ {
struct compunit_symtab *result; struct compunit_symtab *result
= objf->find_pc_sect_compunit_symtab (msymbol, pc, section, 1);
if (!objf->sf)
continue;
result = objf->sf->qf->find_pc_sect_compunit_symtab (objf,
msymbol,
pc, section,
1);
if (result != NULL) if (result != NULL)
return result; return result;
} }
@ -3059,11 +3030,9 @@ find_symbol_at_address (CORE_ADDR address)
for (objfile *objfile : current_program_space->objfiles ()) for (objfile *objfile : current_program_space->objfiles ())
{ {
/* If this objfile doesn't have "quick" functions, then it may /* If this objfile was read with -readnow, then we need to
have been read with -readnow, in which case we need to search search the symtabs directly. */
the symtabs directly. */ if ((objfile->flags & OBJF_READNOW) != 0)
if (objfile->sf == NULL
|| objfile->sf->qf->find_compunit_symtab_by_address == NULL)
{ {
for (compunit_symtab *symtab : objfile->compunits ()) for (compunit_symtab *symtab : objfile->compunits ())
{ {
@ -3075,8 +3044,7 @@ find_symbol_at_address (CORE_ADDR address)
else else
{ {
struct compunit_symtab *symtab struct compunit_symtab *symtab
= objfile->sf->qf->find_compunit_symtab_by_address (objfile, = objfile->find_compunit_symtab_by_address (address);
address);
if (symtab != NULL) if (symtab != NULL)
{ {
struct symbol *sym = search_symtab (symtab, address); struct symbol *sym = search_symtab (symtab, address);
@ -3451,11 +3419,7 @@ find_line_symtab (struct symtab *sym_tab, int line,
best = 0; best = 0;
for (objfile *objfile : current_program_space->objfiles ()) for (objfile *objfile : current_program_space->objfiles ())
{ objfile->expand_symtabs_with_fullname (symtab_to_fullname (sym_tab));
if (objfile->sf)
objfile->sf->qf->expand_symtabs_with_fullname
(objfile, symtab_to_fullname (sym_tab));
}
for (objfile *objfile : current_program_space->objfiles ()) for (objfile *objfile : current_program_space->objfiles ())
{ {
@ -4576,21 +4540,19 @@ global_symbol_searcher::expand_symtabs
enum search_domain kind = m_kind; enum search_domain kind = m_kind;
bool found_msymbol = false; bool found_msymbol = false;
if (objfile->sf) objfile->expand_symtabs_matching
objfile->sf->qf->expand_symtabs_matching ([&] (const char *filename, bool basenames)
(objfile, {
[&] (const char *filename, bool basenames) return file_matches (filename, filenames, basenames);
{ },
return file_matches (filename, filenames, basenames); &lookup_name_info::match_any (),
}, [&] (const char *symname)
&lookup_name_info::match_any (), {
[&] (const char *symname) return (!preg.has_value ()
{ || preg->exec (symname, 0, NULL, 0) == 0);
return (!preg.has_value () },
|| preg->exec (symname, 0, NULL, 0) == 0); NULL,
}, kind);
NULL,
kind);
/* Here, we search through the minimal symbol tables for functions and /* Here, we search through the minimal symbol tables for functions and
variables that match, and force their symbols to be read. This is in variables that match, and force their symbols to be read. This is in