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:
parent
fae2120ba0
commit
4d080b4687
@ -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.
|
||||||
|
@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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. */
|
||||||
|
@ -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 ())
|
||||||
{
|
{
|
||||||
|
@ -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
|
||||||
|
@ -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).
|
||||||
|
@ -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. */
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
106
gdb/symtab.c
106
gdb/symtab.c
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user