aboutsummaryrefslogtreecommitdiff
path: root/gdb/symfile.h
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2021-03-20 17:23:40 -0600
committerTom Tromey <tom@tromey.com>2021-03-20 17:23:41 -0600
commit9b99dcc8dbc4367b2d2af78ee896508b67f5517a (patch)
treef7594286d4adcb185600a7bbb57765a5f030f461 /gdb/symfile.h
parent4d080b4687deb2441a81762f3b01fc51cd13bd97 (diff)
downloadgdb-9b99dcc8dbc4367b2d2af78ee896508b67f5517a.zip
gdb-9b99dcc8dbc4367b2d2af78ee896508b67f5517a.tar.gz
gdb-9b99dcc8dbc4367b2d2af78ee896508b67f5517a.tar.bz2
Move quick_symbol_functions to a new header
This introduces a new header, quick-symbol.h, and moves quick_symbol_functions and related typedefs into it. gdb/ChangeLog 2021-03-20 Tom Tromey <tom@tromey.com> * symfile.h (symbol_compare_ftype, symbol_filename_ftype) (expand_symtabs_file_matcher_ftype) (expand_symtabs_symbol_matcher_ftype) (expand_symtabs_exp_notify_ftype, struct quick_symbol_functions): Move to quick-symbol.h. * quick-symbol.h: New file.
Diffstat (limited to 'gdb/symfile.h')
-rw-r--r--gdb/symfile.h206
1 files changed, 1 insertions, 205 deletions
diff --git a/gdb/symfile.h b/gdb/symfile.h
index 76b6d4b..c87bbed 100644
--- a/gdb/symfile.h
+++ b/gdb/symfile.h
@@ -28,6 +28,7 @@
#include "gdb_bfd.h"
#include "gdbsupport/function-view.h"
#include "target-section.h"
+#include "quick-symbol.h"
/* Opaque declarations. */
struct target_section;
@@ -41,11 +42,6 @@ struct agent_expr;
struct axs_value;
class probe;
-/* Comparison function for symbol look ups. */
-
-typedef int (symbol_compare_ftype) (const char *string1,
- const char *string2);
-
struct other_sections
{
other_sections (CORE_ADDR addr_, std::string &&name_, int sectindex_)
@@ -107,206 +103,6 @@ struct symfile_segment_data
using symfile_segment_data_up = std::unique_ptr<symfile_segment_data>;
-/* Callback for quick_symbol_functions->map_symbol_filenames. */
-
-typedef void (symbol_filename_ftype) (const char *filename,
- const char *fullname, void *data);
-
-/* Callback for quick_symbol_functions->expand_symtabs_matching
- to match a file name. */
-
-typedef bool (expand_symtabs_file_matcher_ftype) (const char *filename,
- bool basenames);
-
-/* Callback for quick_symbol_functions->expand_symtabs_matching
- to match a symbol name. */
-
-typedef bool (expand_symtabs_symbol_matcher_ftype) (const char *name);
-
-/* Callback for quick_symbol_functions->expand_symtabs_matching
- to be called after a symtab has been expanded. */
-
-typedef void (expand_symtabs_exp_notify_ftype) (compunit_symtab *symtab);
-
-/* The "quick" symbol functions exist so that symbol readers can
- avoiding an initial read of all the symbols. For example, symbol
- readers might choose to use the "partial symbol table" utilities,
- which is one implementation of the quick symbol functions.
-
- The quick symbol functions are generally opaque: the underlying
- representation is hidden from the caller.
-
- In general, these functions should only look at whatever special
- index the symbol reader creates -- looking through the symbol
- tables themselves is handled by generic code. If a function is
- defined as returning a "symbol table", this means that the function
- should only return a newly-created symbol table; it should not
- examine pre-existing ones.
-
- The exact list of functions here was determined in an ad hoc way
- based on gdb's history. */
-
-struct quick_symbol_functions
-{
- /* Return true if this objfile has any "partial" symbols
- available. */
- bool (*has_symbols) (struct objfile *objfile);
-
- /* Return the symbol table for the "last" file appearing in
- OBJFILE. */
- struct symtab *(*find_last_source_symtab) (struct objfile *objfile);
-
- /* Forget all cached full file names for OBJFILE. */
- void (*forget_cached_source_info) (struct objfile *objfile);
-
- /* Expand and iterate over each "partial" symbol table in OBJFILE
- where the source file is named NAME.
-
- If NAME is not absolute, a match after a '/' in the symbol table's
- file name will also work, REAL_PATH is NULL then. If NAME is
- absolute then REAL_PATH is non-NULL absolute file name as resolved
- via gdb_realpath from NAME.
-
- If a match is found, the "partial" symbol table is expanded.
- Then, this calls iterate_over_some_symtabs (or equivalent) over
- all newly-created symbol tables, passing CALLBACK to it.
- The result of this call is returned. */
- bool (*map_symtabs_matching_filename)
- (struct objfile *objfile, const char *name, const char *real_path,
- gdb::function_view<bool (symtab *)> callback);
-
- /* Check to see if the symbol is defined in a "partial" symbol table
- of OBJFILE. BLOCK_INDEX should be either GLOBAL_BLOCK or STATIC_BLOCK,
- depending on whether we want to search global symbols or static
- symbols. NAME is the name of the symbol to look for. DOMAIN
- indicates what sort of symbol to search for.
-
- Returns the newly-expanded compunit in which the symbol is
- defined, or NULL if no such symbol table exists. If OBJFILE
- contains !TYPE_OPAQUE symbol prefer its compunit. If it contains
- only TYPE_OPAQUE symbol(s), return at least that compunit. */
- struct compunit_symtab *(*lookup_symbol) (struct objfile *objfile,
- block_enum block_index,
- const char *name,
- domain_enum domain);
-
- /* Check to see if the global symbol is defined in a "partial" symbol table
- of OBJFILE. NAME is the name of the symbol to look for. DOMAIN
- indicates what sort of symbol to search for.
-
- If found, sets *symbol_found_p to true and returns the symbol language.
- defined, or NULL if no such symbol table exists. */
- enum language (*lookup_global_symbol_language) (struct objfile *objfile,
- const char *name,
- domain_enum domain,
- bool *symbol_found_p);
-
- /* Print statistics about any indices loaded for OBJFILE. The
- statistics should be printed to gdb_stdout. This is used for
- "maint print statistics". */
- void (*print_stats) (struct objfile *objfile);
-
- /* Dump any indices loaded for OBJFILE. The dump should go to
- gdb_stdout. This is used for "maint print objfiles". */
- void (*dump) (struct objfile *objfile);
-
- /* Find all the symbols in OBJFILE named FUNC_NAME, and ensure that
- the corresponding symbol tables are loaded. */
- void (*expand_symtabs_for_function) (struct objfile *objfile,
- const char *func_name);
-
- /* Read all symbol tables associated with OBJFILE. */
- void (*expand_all_symtabs) (struct objfile *objfile);
-
- /* Read all symbol tables associated with OBJFILE which have
- symtab_to_fullname equal to FULLNAME.
- This is for the purposes of examining code only, e.g., expand_line_sal.
- The routine may ignore debug info that is known to not be useful with
- code, e.g., DW_TAG_type_unit for dwarf debug info. */
- void (*expand_symtabs_with_fullname) (struct objfile *objfile,
- const char *fullname);
-
- /* Find global or static symbols in all tables that are in DOMAIN
- and for which MATCH (symbol name, NAME) == 0, passing each to
- CALLBACK, reading in partial symbol tables as needed. Look
- through global symbols if GLOBAL and otherwise static symbols.
- Passes NAME and NAMESPACE to CALLBACK with each symbol
- found. After each block is processed, passes NULL to CALLBACK.
- MATCH must be weaker than strcmp_iw_ordered in the sense that
- strcmp_iw_ordered(x,y) == 0 --> MATCH(x,y) == 0. ORDERED_COMPARE,
- if non-null, must be an ordering relation compatible with
- strcmp_iw_ordered in the sense that
- strcmp_iw_ordered(x,y) == 0 --> ORDERED_COMPARE(x,y) == 0
- and
- strcmp_iw_ordered(x,y) <= 0 --> ORDERED_COMPARE(x,y) <= 0
- (allowing strcmp_iw_ordered(x,y) < 0 while ORDERED_COMPARE(x, y) == 0).
- CALLBACK returns true to indicate that the scan should continue, or
- false to indicate that the scan should be terminated. */
-
- void (*map_matching_symbols)
- (struct objfile *,
- const lookup_name_info &lookup_name,
- domain_enum domain,
- int global,
- gdb::function_view<symbol_found_callback_ftype> callback,
- symbol_compare_ftype *ordered_compare);
-
- /* Expand all symbol tables in OBJFILE matching some criteria.
-
- FILE_MATCHER is called for each file in OBJFILE. The file name
- is passed to it. If the matcher returns false, the file is
- skipped. If FILE_MATCHER is NULL the file is not skipped. If
- BASENAMES is true the matcher should consider only file base
- names (the passed file name is already only the lbasename'd
- part).
-
- If the file is not skipped, and SYMBOL_MATCHER and LOOKUP_NAME are NULL,
- the symbol table is expanded.
-
- Otherwise, individual symbols are considered.
-
- If KIND does not match, the symbol is skipped.
-
- If the symbol name does not match LOOKUP_NAME, the symbol is skipped.
-
- If SYMBOL_MATCHER returns false, then the symbol is skipped.
-
- Otherwise, the symbol's symbol table is expanded. */
- void (*expand_symtabs_matching)
- (struct objfile *objfile,
- 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);
-
- /* Return the comp unit from OBJFILE that contains PC and
- SECTION. Return NULL if there is no such compunit. This
- should return the compunit that contains a symbol whose
- address exactly matches PC, or, if there is no exact match, the
- compunit that contains a symbol whose address is closest to
- PC. */
- struct compunit_symtab *(*find_pc_sect_compunit_symtab)
- (struct objfile *objfile, struct bound_minimal_symbol msymbol,
- CORE_ADDR pc, struct obj_section *section, int warn_if_readin);
-
- /* Return the comp unit from OBJFILE that contains a symbol at
- ADDRESS. Return NULL if there is no such comp unit. Unlike
- find_pc_sect_compunit_symtab, any sort of symbol (not just text
- symbols) can be considered, and only exact address matches are
- considered. This pointer may be NULL. */
- struct compunit_symtab *(*find_compunit_symtab_by_address)
- (struct objfile *objfile, CORE_ADDR address);
-
- /* Call a callback for every file defined in OBJFILE whose symtab is
- not already read in. FUN is the callback. It is passed the file's
- FILENAME, the file's FULLNAME (if need_fullname is non-zero), and
- the DATA passed to this function. */
- void (*map_symbol_filenames) (struct objfile *objfile,
- symbol_filename_ftype *fun, void *data,
- int need_fullname);
-};
-
/* Structure of functions used for probe support. If one of these functions
is provided, all must be. */