diff options
author | Tom Tromey <tom@tromey.com> | 2021-03-20 17:23:40 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2021-03-20 17:23:41 -0600 |
commit | 9b99dcc8dbc4367b2d2af78ee896508b67f5517a (patch) | |
tree | f7594286d4adcb185600a7bbb57765a5f030f461 /gdb/symfile.h | |
parent | 4d080b4687deb2441a81762f3b01fc51cd13bd97 (diff) | |
download | gdb-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.h | 206 |
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. */ |