From: Tom Tromey <tom@tromey.com>
To: gdb-patches@sourceware.org
Subject: [PATCH 05/26] Introduce method wrappers for quick_symbol_functions
Date: Sun, 28 Feb 2021 13:37:42 -0700 [thread overview]
Message-ID: <20210228203803.1693413-6-tom@tromey.com> (raw)
In-Reply-To: <20210228203803.1693413-1-tom@tromey.com>
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-02-28 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.
---
gdb/ChangeLog | 38 ++++
gdb/ada-lang.c | 11 +-
gdb/cp-support.c | 5 +-
gdb/linespec.c | 8 +-
gdb/objfiles.c | 19 --
gdb/objfiles.h | 69 +++++++-
gdb/source.c | 6 +-
gdb/symfile-debug.c | 418 +++++++++++++++++++++-----------------------
gdb/symfile.c | 20 +--
gdb/symmisc.c | 34 ++--
gdb/symtab.c | 106 ++++-------
11 files changed, 368 insertions(+), 366 deletions(-)
diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c
index 419347f776d..17b0aca2d8d 100644
--- a/gdb/ada-lang.c
+++ b/gdb/ada-lang.c
@@ -5629,10 +5629,8 @@ add_nonlocal_symbols (struct obstack *obstackp,
{
data.objfile = objfile;
- objfile->sf->qf->map_matching_symbols (objfile, lookup_name,
- domain, global, callback,
- (is_wild_match
- ? NULL : compare_names));
+ objfile->map_matching_symbols (lookup_name, domain, global, callback,
+ is_wild_match ? NULL : compare_names);
for (compunit_symtab *cu : objfile->compunits ())
{
@@ -5654,9 +5652,8 @@ add_nonlocal_symbols (struct obstack *obstackp,
for (objfile *objfile : current_program_space->objfiles ())
{
data.objfile = objfile;
- objfile->sf->qf->map_matching_symbols (objfile, name1,
- domain, global, callback,
- compare_names);
+ objfile->map_matching_symbols (name1, domain, global, callback,
+ compare_names);
}
}
}
diff --git a/gdb/cp-support.c b/gdb/cp-support.c
index 1abc3e22a72..45fe834aa03 100644
--- a/gdb/cp-support.c
+++ b/gdb/cp-support.c
@@ -1452,10 +1452,7 @@ add_symbol_overload_list_qualified (const char *func_name,
matching FUNC_NAME. Make sure we read that symbol table in. */
for (objfile *objf : current_program_space->objfiles ())
- {
- if (objf->sf)
- objf->sf->qf->expand_symtabs_for_function (objf, func_name);
- }
+ objf->expand_symtabs_for_function (func_name);
/* Search upwards from currently selected frame (so that we can
complete on local vars. */
diff --git a/gdb/linespec.c b/gdb/linespec.c
index 9bfa159514e..c7dbd3eeae2 100644
--- a/gdb/linespec.c
+++ b/gdb/linespec.c
@@ -1168,12 +1168,8 @@ iterate_over_all_matching_symtabs
for (objfile *objfile : current_program_space->objfiles ())
{
- if (objfile->sf)
- objfile->sf->qf->expand_symtabs_matching (objfile,
- NULL,
- &lookup_name,
- NULL, NULL,
- search_domain);
+ objfile->expand_symtabs_matching (NULL, &lookup_name, NULL, NULL,
+ search_domain);
for (compunit_symtab *cu : objfile->compunits ())
{
diff --git a/gdb/objfiles.c b/gdb/objfiles.c
index 746f7d1f296..f18f6158fc3 100644
--- a/gdb/objfiles.c
+++ b/gdb/objfiles.c
@@ -810,25 +810,6 @@ objfile_rebase (struct objfile *objfile, CORE_ADDR slide)
breakpoint_re_set ();
}
\f
-/* 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. */
int
diff --git a/gdb/objfiles.h b/gdb/objfiles.h
index f961bdc0116..c55f0f174fc 100644
--- a/gdb/objfiles.h
+++ b/gdb/objfiles.h
@@ -415,8 +415,8 @@ class separate_debug_range
GDB typically reads symbols twice -- first an initial scan which just
reads "partial symbols"; these are partial information for the
- static/global symbols in a symbol file. When later looking up symbols,
- objfile->sf->qf->lookup_symbol is used to check if we only have a partial
+ static/global symbols in a symbol file. When later looking up
+ symbols, lookup_symbol is used to check if we only have a partial
symbol and if so, read and expand the full compunit. */
struct objfile
@@ -552,6 +552,71 @@ struct objfile
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,
made absolute, and tilde-expanded. However, it is not canonicalized
(i.e., it has not been passed through gdb_realpath).
diff --git a/gdb/source.c b/gdb/source.c
index 3a8f829759b..6fc27ae72f7 100644
--- a/gdb/source.c
+++ b/gdb/source.c
@@ -342,8 +342,7 @@ select_source_symtab (struct symtab *s)
for (objfile *objfile : current_program_space->objfiles ())
{
- if (objfile->sf)
- s = objfile->sf->qf->find_last_source_symtab (objfile);
+ s = objfile->find_last_source_symtab ();
if (s)
new_symtab = s;
}
@@ -417,8 +416,7 @@ forget_cached_source_info_for_objfile (struct objfile *objfile)
}
}
- if (objfile->sf)
- objfile->sf->qf->forget_cached_source_info (objfile);
+ objfile->forget_cached_source_info ();
}
/* See source.h. */
diff --git a/gdb/symfile-debug.c b/gdb/symfile-debug.c
index 7c022ae341d..419f24d2240 100644
--- a/gdb/symfile-debug.c
+++ b/gdb/symfile-debug.c
@@ -68,312 +68,296 @@ debug_symtab_name (struct symtab *symtab)
return symtab_to_filename_for_display (symtab);
}
\f
-/* Debugging version of struct quick_symbol_functions. */
-static bool
-debug_qf_has_symbols (struct objfile *objfile)
+/* See objfiles.h. */
+
+bool
+objfile::has_partial_symbols ()
{
- const struct debug_sym_fns_data *debug_data
- = symfile_debug_objfile_data_key.get (objfile);
- bool retval;
+ bool retval = false;
- 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",
- objfile_debug_name (objfile), retval);
+ if (debug_symfile)
+ fprintf_filtered (gdb_stdlog, "qf->has_symbols (%s) = %d\n",
+ objfile_debug_name (this), retval);
return retval;
}
-static struct symtab *
-debug_qf_find_last_source_symtab (struct objfile *objfile)
+struct symtab *
+objfile::find_last_source_symtab ()
{
- const struct debug_sym_fns_data *debug_data
- = symfile_debug_objfile_data_key.get (objfile);
- struct symtab *retval;
+ struct symtab *retval = nullptr;
- fprintf_filtered (gdb_stdlog, "qf->find_last_source_symtab (%s)\n",
- objfile_debug_name (objfile));
+ if (debug_symfile)
+ 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",
- retval ? debug_symtab_name (retval) : "NULL");
+ if (debug_symfile)
+ fprintf_filtered (gdb_stdlog, "qf->find_last_source_symtab (...) = %s\n",
+ retval ? debug_symtab_name (retval) : "NULL");
return retval;
}
-static void
-debug_qf_forget_cached_source_info (struct objfile *objfile)
+void
+objfile::forget_cached_source_info ()
{
- const struct debug_sym_fns_data *debug_data
- = symfile_debug_objfile_data_key.get (objfile);
-
- fprintf_filtered (gdb_stdlog, "qf->forget_cached_source_info (%s)\n",
- objfile_debug_name (objfile));
+ if (debug_symfile)
+ fprintf_filtered (gdb_stdlog, "qf->forget_cached_source_info (%s)\n",
+ objfile_debug_name (this));
- debug_data->real_sf->qf->forget_cached_source_info (objfile);
+ if (sf != nullptr)
+ sf->qf->forget_cached_source_info (this);
}
-static bool
-debug_qf_map_symtabs_matching_filename
- (struct objfile *objfile, const char *name, const char *real_path,
+bool
+objfile::map_symtabs_matching_filename
+ (const char *name, const char *real_path,
gdb::function_view<bool (symtab *)> callback)
{
- const struct debug_sym_fns_data *debug_data
- = symfile_debug_objfile_data_key.get (objfile);
-
- fprintf_filtered (gdb_stdlog,
- "qf->map_symtabs_matching_filename (%s, \"%s\", \"%s\", %s)\n",
- objfile_debug_name (objfile), name,
- real_path ? real_path : NULL,
- host_address_to_string (&callback));
-
- bool retval = (debug_data->real_sf->qf->map_symtabs_matching_filename
- (objfile, name, real_path, callback));
+ if (debug_symfile)
+ 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));
+
+ bool retval = false;
+ if (sf != nullptr)
+ retval = (sf->qf->map_symtabs_matching_filename
+ (this, name, real_path, callback));
- fprintf_filtered (gdb_stdlog,
- "qf->map_symtabs_matching_filename (...) = %d\n",
- retval);
+ if (debug_symfile)
+ fprintf_filtered (gdb_stdlog,
+ "qf->map_symtabs_matching_filename (...) = %d\n",
+ retval);
return retval;
}
-static struct compunit_symtab *
-debug_qf_lookup_symbol (struct objfile *objfile, block_enum kind,
- const char *name, domain_enum domain)
+struct compunit_symtab *
+objfile::lookup_symbol (block_enum kind, const char *name, domain_enum domain)
{
- const struct debug_sym_fns_data *debug_data
- = symfile_debug_objfile_data_key.get (objfile);
- struct compunit_symtab *retval;
+ struct compunit_symtab *retval = nullptr;
- fprintf_filtered (gdb_stdlog,
- "qf->lookup_symbol (%s, %d, \"%s\", %s)\n",
- objfile_debug_name (objfile), kind, name,
- domain_name (domain));
+ if (debug_symfile)
+ fprintf_filtered (gdb_stdlog,
+ "qf->lookup_symbol (%s, %d, \"%s\", %s)\n",
+ objfile_debug_name (this), kind, name,
+ domain_name (domain));
- retval = debug_data->real_sf->qf->lookup_symbol (objfile, kind, name,
- domain);
+ if (sf != nullptr)
+ retval = sf->qf->lookup_symbol (this, kind, name, domain);
- fprintf_filtered (gdb_stdlog, "qf->lookup_symbol (...) = %s\n",
- retval
- ? debug_symtab_name (compunit_primary_filetab (retval))
- : "NULL");
+ if (debug_symfile)
+ fprintf_filtered (gdb_stdlog, "qf->lookup_symbol (...) = %s\n",
+ retval
+ ? debug_symtab_name (compunit_primary_filetab (retval))
+ : "NULL");
return retval;
}
-static void
-debug_qf_print_stats (struct objfile *objfile)
+void
+objfile::print_stats ()
{
- const struct debug_sym_fns_data *debug_data
- = symfile_debug_objfile_data_key.get (objfile);
-
- fprintf_filtered (gdb_stdlog, "qf->print_stats (%s)\n",
- objfile_debug_name (objfile));
+ if (debug_symfile)
+ fprintf_filtered (gdb_stdlog, "qf->print_stats (%s)\n",
+ objfile_debug_name (this));
- debug_data->real_sf->qf->print_stats (objfile);
+ if (sf != nullptr)
+ sf->qf->print_stats (this);
}
-static void
-debug_qf_dump (struct objfile *objfile)
+void
+objfile::dump ()
{
- const struct debug_sym_fns_data *debug_data
- = symfile_debug_objfile_data_key.get (objfile);
-
- fprintf_filtered (gdb_stdlog, "qf->dump (%s)\n",
- objfile_debug_name (objfile));
+ if (debug_symfile)
+ fprintf_filtered (gdb_stdlog, "qf->dump (%s)\n",
+ objfile_debug_name (this));
- debug_data->real_sf->qf->dump (objfile);
+ if (sf != nullptr)
+ sf->qf->dump (this);
}
-static void
-debug_qf_expand_symtabs_for_function (struct objfile *objfile,
- const char *func_name)
+void
+objfile::expand_symtabs_for_function (const char *func_name)
{
- const struct debug_sym_fns_data *debug_data
- = symfile_debug_objfile_data_key.get (objfile);
-
- fprintf_filtered (gdb_stdlog,
- "qf->expand_symtabs_for_function (%s, \"%s\")\n",
- objfile_debug_name (objfile), func_name);
+ if (debug_symfile)
+ fprintf_filtered (gdb_stdlog,
+ "qf->expand_symtabs_for_function (%s, \"%s\")\n",
+ objfile_debug_name (this), func_name);
- debug_data->real_sf->qf->expand_symtabs_for_function (objfile, func_name);
+ if (sf != nullptr)
+ sf->qf->expand_symtabs_for_function (this, func_name);
}
-static void
-debug_qf_expand_all_symtabs (struct objfile *objfile)
+void
+objfile::expand_all_symtabs ()
{
- const struct debug_sym_fns_data *debug_data
- = symfile_debug_objfile_data_key.get (objfile);
-
- fprintf_filtered (gdb_stdlog, "qf->expand_all_symtabs (%s)\n",
- objfile_debug_name (objfile));
+ if (debug_symfile)
+ fprintf_filtered (gdb_stdlog, "qf->expand_all_symtabs (%s)\n",
+ objfile_debug_name (this));
- debug_data->real_sf->qf->expand_all_symtabs (objfile);
+ if (sf != nullptr)
+ sf->qf->expand_all_symtabs (this);
}
-static void
-debug_qf_expand_symtabs_with_fullname (struct objfile *objfile,
- const char *fullname)
+void
+objfile::expand_symtabs_with_fullname (const char *fullname)
{
- const struct debug_sym_fns_data *debug_data
- = symfile_debug_objfile_data_key.get (objfile);
-
- fprintf_filtered (gdb_stdlog,
- "qf->expand_symtabs_with_fullname (%s, \"%s\")\n",
- objfile_debug_name (objfile), fullname);
+ if (debug_symfile)
+ fprintf_filtered (gdb_stdlog,
+ "qf->expand_symtabs_with_fullname (%s, \"%s\")\n",
+ objfile_debug_name (this), fullname);
- debug_data->real_sf->qf->expand_symtabs_with_fullname (objfile, fullname);
+ if (sf != nullptr)
+ sf->qf->expand_symtabs_with_fullname (this, fullname);
}
-static void
-debug_qf_map_matching_symbols
- (struct objfile *objfile,
- const lookup_name_info &name, domain_enum domain,
+void
+objfile::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)
{
- const struct debug_sym_fns_data *debug_data
- = symfile_debug_objfile_data_key.get (objfile);
-
- fprintf_filtered (gdb_stdlog,
- "qf->map_matching_symbols (%s, %s, %d, %s)\n",
- objfile_debug_name (objfile),
- domain_name (domain), global,
- host_address_to_string (ordered_compare));
+ if (debug_symfile)
+ 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));
- debug_data->real_sf->qf->map_matching_symbols (objfile, name,
- domain, global,
- callback,
- ordered_compare);
+ if (sf != nullptr)
+ sf->qf->map_matching_symbols (this, name, domain, global,
+ callback, ordered_compare);
}
-static void
-debug_qf_expand_symtabs_matching
- (struct objfile *objfile,
- gdb::function_view<expand_symtabs_file_matcher_ftype> file_matcher,
+void
+objfile::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)
{
- const struct debug_sym_fns_data *debug_data
- = symfile_debug_objfile_data_key.get (objfile);
+ if (debug_symfile)
+ 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,
- "qf->expand_symtabs_matching (%s, %s, %s, %s, %s)\n",
- objfile_debug_name (objfile),
- 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 *
-debug_qf_find_pc_sect_compunit_symtab (struct objfile *objfile,
- struct bound_minimal_symbol msymbol,
+ if (sf != nullptr)
+ sf->qf->expand_symtabs_matching (this, file_matcher, lookup_name,
+ symbol_matcher, expansion_notify, kind);
+}
+
+struct compunit_symtab *
+objfile::find_pc_sect_compunit_symtab (struct bound_minimal_symbol msymbol,
CORE_ADDR pc,
struct obj_section *section,
int warn_if_readin)
{
- const struct debug_sym_fns_data *debug_data
- = symfile_debug_objfile_data_key.get (objfile);
- struct compunit_symtab *retval;
+ struct compunit_symtab *retval = nullptr;
- fprintf_filtered (gdb_stdlog,
- "qf->find_pc_sect_compunit_symtab (%s, %s, %s, %s, %d)\n",
- objfile_debug_name (objfile),
- host_address_to_string (msymbol.minsym),
- hex_string (pc),
- host_address_to_string (section),
- warn_if_readin);
-
- retval
- = debug_data->real_sf->qf->find_pc_sect_compunit_symtab (objfile, msymbol,
- pc, section,
- warn_if_readin);
+ if (debug_symfile)
+ fprintf_filtered (gdb_stdlog,
+ "qf->find_pc_sect_compunit_symtab (%s, %s, %s, %s, %d)\n",
+ objfile_debug_name (this),
+ host_address_to_string (msymbol.minsym),
+ hex_string (pc),
+ 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);
- fprintf_filtered (gdb_stdlog,
- "qf->find_pc_sect_compunit_symtab (...) = %s\n",
- retval
- ? debug_symtab_name (compunit_primary_filetab (retval))
- : "NULL");
+ if (debug_symfile)
+ fprintf_filtered (gdb_stdlog,
+ "qf->find_pc_sect_compunit_symtab (...) = %s\n",
+ retval
+ ? debug_symtab_name (compunit_primary_filetab (retval))
+ : "NULL");
return retval;
}
-static void
-debug_qf_map_symbol_filenames (struct objfile *objfile,
- symbol_filename_ftype *fun, void *data,
+void
+objfile::map_symbol_filenames (symbol_filename_ftype *fun, void *data,
int need_fullname)
{
- const struct debug_sym_fns_data *debug_data
- = symfile_debug_objfile_data_key.get (objfile);
- fprintf_filtered (gdb_stdlog,
- "qf->map_symbol_filenames (%s, %s, %s, %d)\n",
- objfile_debug_name (objfile),
- host_address_to_string (fun),
- host_address_to_string (data),
- need_fullname);
+ if (debug_symfile)
+ fprintf_filtered (gdb_stdlog,
+ "qf->map_symbol_filenames (%s, %s, %s, %d)\n",
+ objfile_debug_name (this),
+ host_address_to_string (fun),
+ host_address_to_string (data),
+ need_fullname);
- debug_data->real_sf->qf->map_symbol_filenames (objfile, fun, data,
- need_fullname);
+ if (sf != nullptr)
+ sf->qf->map_symbol_filenames (this, fun, data, need_fullname);
}
-static struct compunit_symtab *
-debug_qf_find_compunit_symtab_by_address (struct objfile *objfile,
- CORE_ADDR address)
+struct compunit_symtab *
+objfile::find_compunit_symtab_by_address (CORE_ADDR address)
{
- const struct debug_sym_fns_data *debug_data
- = symfile_debug_objfile_data_key.get (objfile);
- fprintf_filtered (gdb_stdlog,
- "qf->find_compunit_symtab_by_address (%s, %s)\n",
- objfile_debug_name (objfile),
- hex_string (address));
+ if (debug_symfile)
+ fprintf_filtered (gdb_stdlog,
+ "qf->find_compunit_symtab_by_address (%s, %s)\n",
+ objfile_debug_name (this),
+ hex_string (address));
struct compunit_symtab *result = NULL;
- if (debug_data->real_sf->qf->map_symbol_filenames != NULL)
- result
- = debug_data->real_sf->qf->find_compunit_symtab_by_address (objfile,
- address);
+ if (sf != nullptr && sf->qf->find_compunit_symtab_by_address != NULL)
+ result = sf->qf->find_compunit_symtab_by_address (this, address);
- fprintf_filtered (gdb_stdlog,
- "qf->find_compunit_symtab_by_address (...) = %s\n",
- result
- ? debug_symtab_name (compunit_primary_filetab (result))
- : "NULL");
+ if (debug_symfile)
+ fprintf_filtered (gdb_stdlog,
+ "qf->find_compunit_symtab_by_address (...) = %s\n",
+ result
+ ? debug_symtab_name (compunit_primary_filetab (result))
+ : "NULL");
+
+ return result;
+}
+
+enum language
+objfile::lookup_global_symbol_language (const char *name,
+ domain_enum domain,
+ bool *symbol_found_p)
+{
+ 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);
+ else
+ *symbol_found_p = false;
return result;
}
-static const struct quick_symbol_functions debug_sym_quick_functions =
-{
- debug_qf_has_symbols,
- debug_qf_find_last_source_symtab,
- debug_qf_forget_cached_source_info,
- debug_qf_map_symtabs_matching_filename,
- debug_qf_lookup_symbol,
- NULL,
- debug_qf_print_stats,
- debug_qf_dump,
- debug_qf_expand_symtabs_for_function,
- 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
-};
\f
/* 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_relocate,
&debug_sym_probe_fns,
- &debug_sym_quick_functions
+ nullptr
};
\f
/* 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);
if (real_sf->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
diff --git a/gdb/symfile.c b/gdb/symfile.c
index 34d6363a91a..ac9adc816a4 100644
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -1100,8 +1100,7 @@ symbol_file_add_with_addrs (bfd *abfd, const char *name,
printf_filtered (_("Expanding full symbols from %ps...\n"),
styled_string (file_name_style.style (), name));
- if (objfile->sf)
- objfile->sf->qf->expand_all_symtabs (objfile);
+ objfile->expand_all_symtabs ();
}
/* 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)
{
for (objfile *objfile : current_program_space->objfiles ())
- {
- if (objfile->sf)
- objfile->sf->qf->expand_symtabs_matching (objfile, file_matcher,
- &lookup_name,
- symbol_matcher,
- expansion_notify, kind);
- }
+ objfile->expand_symtabs_matching (file_matcher,
+ &lookup_name,
+ symbol_matcher,
+ expansion_notify, kind);
}
/* 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)
{
for (objfile *objfile : current_program_space->objfiles ())
- {
- if (objfile->sf)
- objfile->sf->qf->map_symbol_filenames (objfile, fun, data,
- need_fullname);
- }
+ objfile->map_symbol_filenames (fun, data, need_fullname);
}
#if GDB_SELF_TEST
diff --git a/gdb/symmisc.c b/gdb/symmisc.c
index 3703e50c6de..0aab30d08ab 100644
--- a/gdb/symmisc.c
+++ b/gdb/symmisc.c
@@ -105,8 +105,7 @@ print_objfile_statistics (void)
if (OBJSTAT (objfile, n_types) > 0)
printf_filtered (_(" Number of \"types\" defined: %d\n"),
OBJSTAT (objfile, n_types));
- if (objfile->sf)
- objfile->sf->qf->print_stats (objfile);
+ objfile->print_stats ();
i = linetables = 0;
for (compunit_symtab *cu : objfile->compunits ())
{
@@ -153,8 +152,7 @@ dump_objfile (struct objfile *objfile)
printf_filtered (", %d minsyms\n\n",
objfile->per_bfd->minimal_symbol_count);
- if (objfile->sf)
- objfile->sf->qf->dump (objfile);
+ objfile->dump ();
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 (objfile *objfile : pspace->objfiles ())
- {
- if (objfile->sf)
- {
- objfile->sf->qf->expand_symtabs_matching
- (objfile,
- [&] (const char *filename, bool basenames)
- {
- /* KISS: Only apply the regexp to the complete file name. */
- return (!basenames
- && (regexp == NULL || re_exec (filename)));
- },
- NULL,
- NULL,
- NULL,
- ALL_DOMAIN);
- }
- }
+ objfile->expand_symtabs_matching
+ ([&] (const char *filename, bool basenames)
+ {
+ /* KISS: Only apply the regexp to the complete file name. */
+ return (!basenames
+ && (regexp == NULL || re_exec (filename)));
+ },
+ NULL,
+ NULL,
+ NULL,
+ ALL_DOMAIN);
}
\f
diff --git a/gdb/symtab.c b/gdb/symtab.c
index 3650b49832e..084e8ecc2e8 100644
--- a/gdb/symtab.c
+++ b/gdb/symtab.c
@@ -555,11 +555,8 @@ iterate_over_symtabs (const char *name,
for (objfile *objfile : current_program_space->objfiles ())
{
- if (objfile->sf
- && objfile->sf->qf->map_symtabs_matching_filename (objfile,
- name,
- real_path.get (),
- callback))
+ if (objfile->map_symtabs_matching_filename (name, real_path.get (),
+ callback))
return;
}
}
@@ -1114,11 +1111,8 @@ expand_symtab_containing_pc (CORE_ADDR pc, struct obj_section *section)
for (objfile *objfile : current_program_space->objfiles ())
{
- struct compunit_symtab *cust = NULL;
-
- if (objfile->sf)
- cust = objfile->sf->qf->find_pc_sect_compunit_symtab (objfile, msymbol,
- pc, section, 0);
+ struct compunit_symtab *cust
+ = objfile->find_pc_sect_compunit_symtab (msymbol, pc, section, 0);
if (cust)
return;
}
@@ -2369,9 +2363,6 @@ lookup_symbol_via_quick_fns (struct objfile *objfile,
const struct block *block;
struct block_symbol result;
- if (!objfile->sf)
- return {};
-
if (symbol_lookup_debug > 1)
{
fprintf_unfiltered (gdb_stdlog,
@@ -2382,7 +2373,7 @@ lookup_symbol_via_quick_fns (struct objfile *objfile,
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 (symbol_lookup_debug > 1)
@@ -2549,23 +2540,13 @@ lookup_symbol_in_objfile (struct objfile *objfile, enum block_enum block_index,
static enum language
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 ())
{
bool symbol_found_p;
enum language lang
- = objfile->sf->qf->lookup_global_symbol_language (objfile, name, domain,
- &symbol_found_p);
- if (!symbol_found_p)
- continue;
- return lang;
+ = objfile->lookup_global_symbol_language (name, domain, &symbol_found_p);
+ if (symbol_found_p)
+ return lang;
}
return language_unknown;
@@ -2749,10 +2730,7 @@ basic_lookup_transparent_type_quick (struct objfile *objfile,
const struct block *block;
struct symbol *sym;
- if (!objfile->sf)
- return NULL;
- cust = objfile->sf->qf->lookup_symbol (objfile, block_index, name,
- STRUCT_DOMAIN);
+ cust = objfile->lookup_symbol (block_index, name, STRUCT_DOMAIN);
if (cust == 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
stabs and coff debugging info, we continue on if a psymtab
can't be found. */
- if ((obj_file->flags & OBJF_REORDERED) && obj_file->sf)
+ if ((obj_file->flags & OBJF_REORDERED) != 0)
{
struct compunit_symtab *result;
result
- = obj_file->sf->qf->find_pc_sect_compunit_symtab (obj_file,
- msymbol,
- pc,
- section,
- 0);
+ = obj_file->find_pc_sect_compunit_symtab (msymbol,
+ pc,
+ section,
+ 0);
if (result != NULL)
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 ())
{
- struct compunit_symtab *result;
-
- if (!objf->sf)
- continue;
- result = objf->sf->qf->find_pc_sect_compunit_symtab (objf,
- msymbol,
- pc, section,
- 1);
+ struct compunit_symtab *result
+ = objf->find_pc_sect_compunit_symtab (msymbol, pc, section, 1);
if (result != NULL)
return result;
}
@@ -3059,11 +3030,9 @@ find_symbol_at_address (CORE_ADDR address)
for (objfile *objfile : current_program_space->objfiles ())
{
- /* If this objfile doesn't have "quick" functions, then it may
- have been read with -readnow, in which case we need to search
- the symtabs directly. */
- if (objfile->sf == NULL
- || objfile->sf->qf->find_compunit_symtab_by_address == NULL)
+ /* If this objfile was read with -readnow, then we need to
+ search the symtabs directly. */
+ if ((objfile->flags & OBJF_READNOW) != 0)
{
for (compunit_symtab *symtab : objfile->compunits ())
{
@@ -3075,8 +3044,7 @@ find_symbol_at_address (CORE_ADDR address)
else
{
struct compunit_symtab *symtab
- = objfile->sf->qf->find_compunit_symtab_by_address (objfile,
- address);
+ = objfile->find_compunit_symtab_by_address (address);
if (symtab != NULL)
{
struct symbol *sym = search_symtab (symtab, address);
@@ -3451,11 +3419,7 @@ find_line_symtab (struct symtab *sym_tab, int line,
best = 0;
for (objfile *objfile : current_program_space->objfiles ())
- {
- if (objfile->sf)
- objfile->sf->qf->expand_symtabs_with_fullname
- (objfile, symtab_to_fullname (sym_tab));
- }
+ objfile->expand_symtabs_with_fullname (symtab_to_fullname (sym_tab));
for (objfile *objfile : current_program_space->objfiles ())
{
@@ -4576,21 +4540,19 @@ global_symbol_searcher::expand_symtabs
enum search_domain kind = m_kind;
bool found_msymbol = false;
- if (objfile->sf)
- objfile->sf->qf->expand_symtabs_matching
- (objfile,
- [&] (const char *filename, bool basenames)
- {
- return file_matches (filename, filenames, basenames);
- },
- &lookup_name_info::match_any (),
- [&] (const char *symname)
- {
- return (!preg.has_value ()
- || preg->exec (symname, 0, NULL, 0) == 0);
- },
- NULL,
- kind);
+ objfile->expand_symtabs_matching
+ ([&] (const char *filename, bool basenames)
+ {
+ return file_matches (filename, filenames, basenames);
+ },
+ &lookup_name_info::match_any (),
+ [&] (const char *symname)
+ {
+ return (!preg.has_value ()
+ || preg->exec (symname, 0, NULL, 0) == 0);
+ },
+ NULL,
+ kind);
/* Here, we search through the minimal symbol tables for functions and
variables that match, and force their symbols to be read. This is in
--
2.26.2
next prev parent reply other threads:[~2021-02-28 20:38 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-28 20:37 [PATCH 00/26] Allow multiple "partial" symtab readers per objfile Tom Tromey
2021-02-28 20:37 ` [PATCH 01/26] Move some DWARF code out of symfile.h Tom Tromey
2021-02-28 20:37 ` [PATCH 02/26] Introduce dwarf2/public.h Tom Tromey
2021-02-28 20:37 ` [PATCH 03/26] Change objfile_has_partial_symbols to a method Tom Tromey
2021-02-28 20:37 ` [PATCH 04/26] Change objfile::has_partial_symbols to return bool Tom Tromey
2021-02-28 20:37 ` Tom Tromey [this message]
2021-03-22 13:52 ` [PATCH 05/26] Introduce method wrappers for quick_symbol_functions Simon Marchi
2021-02-28 20:37 ` [PATCH 06/26] Move quick_symbol_functions to a new header Tom Tromey
2021-02-28 20:37 ` [PATCH 07/26] Move sym_fns::qf to objfile Tom Tromey
2021-02-28 20:37 ` [PATCH 08/26] Convert quick_symbol_functions to use methods Tom Tromey
2021-02-28 20:37 ` [PATCH 09/26] Move psymbol_map out of objfile Tom Tromey
2021-02-28 20:37 ` [PATCH 10/26] Change how some psymbol readers access the psymtab storage Tom Tromey
2021-02-28 20:37 ` [PATCH 11/26] Do not pass objfile to psymtab_discarder Tom Tromey
2021-02-28 20:37 ` [PATCH 12/26] Set per_bfd->partial_symtabs earlier Tom Tromey
2021-02-28 20:37 ` [PATCH 13/26] Change how DWARF indices use addrmap Tom Tromey
2021-02-28 20:37 ` [PATCH 14/26] Move psymtab statistics printing to psymtab.c Tom Tromey
2021-02-28 20:37 ` [PATCH 15/26] Change how DWARF index writer finds address map Tom Tromey
2021-02-28 20:37 ` [PATCH 16/26] Reference psymtabs via per_bfd in DWARF reader Tom Tromey
2021-02-28 20:37 ` [PATCH 17/26] Attach partial symtab storage to psymbol_functions Tom Tromey
2021-02-28 20:37 ` [PATCH 18/26] Rearrange psymtab_storage construction Tom Tromey
2021-02-28 20:37 ` [PATCH 19/26] Remove sym_fns::sym_read_psymbols Tom Tromey
2021-02-28 20:37 ` [PATCH 20/26] Introduce objfile::require_partial_symbols Tom Tromey
2021-02-28 20:37 ` [PATCH 21/26] Add partial_symtabs parameter to psymtab construction functions Tom Tromey
2021-02-28 20:37 ` [PATCH 22/26] Remove last objfile partial_symtab references from psymtab.c Tom Tromey
2021-02-28 20:38 ` [PATCH 23/26] Change count_psyms to be a method on psymbol_functions Tom Tromey
2021-02-28 20:38 ` [PATCH 24/26] Remove objfile::psymtabs Tom Tromey
2021-02-28 20:38 ` [PATCH 25/26] Switch objfile to hold a list of psymbol readers Tom Tromey
2021-02-28 20:38 ` [PATCH 26/26] Allow multiple partial symbol readers per objfile Tom Tromey
2021-03-20 23:33 ` [PATCH 00/26] Allow multiple "partial" symtab " Tom Tromey
2021-03-22 14:13 ` Simon Marchi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210228203803.1693413-6-tom@tromey.com \
--to=tom@tromey.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).