-/* Callback for quick_symbol_functions->map_symbol_filenames. */
-
-typedef void (symbol_filename_ftype) (const char *filename,
- const char *fullname, void *data);
-
-/* 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. */
- int (*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 and DATA to it.
- The result of this call is returned. */
- int (*map_symtabs_matching_filename) (struct objfile *objfile,
- const char *name,
- const char *real_path,
- int (*callback) (struct symtab *,
- void *),
- void *data);
-
- /* Check to see if the symbol is defined in a "partial" symbol table
- of OBJFILE. KIND 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 symbol table in which the symbol is
- defined, or NULL if no such symbol table exists. If OBJFILE
- contains !TYPE_OPAQUE symbol prefer its symtab. If it contains
- only TYPE_OPAQUE symbol(s), return at least that symtab. */
- struct symtab *(*lookup_symbol) (struct objfile *objfile,
- int kind, const char *name,
- domain_enum domain);
-
- /* 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);
-
- /* This is called by objfile_relocate to relocate any indices loaded
- for OBJFILE. */
- void (*relocate) (struct objfile *objfile,
- const struct section_offsets *new_offsets,
- const struct section_offsets *delta);
-
- /* 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 NAMESPACE
- 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, NAMESPACE, and DATA 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 0 to indicate that the scan should continue, or
- non-zero to indicate that the scan should be terminated. */
-
- void (*map_matching_symbols) (struct objfile *,
- const char *name, domain_enum namespace,
- int global,
- int (*callback) (struct block *,
- struct symbol *, void *),
- void *data,
- symbol_compare_ftype *match,
- 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
- and the DATA argument are passed to it. If it returns zero, this
- file is skipped. If FILE_MATCHER is NULL such file is not skipped.
- If BASENAMES is non-zero the function should consider only base name of
- DATA (passed file name is already only the lbasename part).
-
- Otherwise, if KIND does not match this symbol is skipped.
-
- If even KIND matches, then NAME_MATCHER is called for each symbol
- defined in the file. The symbol "search" name and DATA are passed
- to NAME_MATCHER.
-
- If NAME_MATCHER returns zero, then this symbol is skipped.
-
- Otherwise, this symbol's symbol table is expanded.
-
- DATA is user data that is passed unmodified to the callback
- functions. */
- void (*expand_symtabs_matching)
- (struct objfile *objfile,
- int (*file_matcher) (const char *, void *, int basenames),
- int (*name_matcher) (const char *, void *),
- enum search_domain kind,
- void *data);
-
- /* Return the symbol table from OBJFILE that contains PC and
- SECTION. Return NULL if there is no such symbol table. This
- should return the symbol table that contains a symbol whose
- address exactly matches PC, or, if there is no exact match, the
- symbol table that contains a symbol whose address is closest to
- PC. */
- struct symtab *(*find_pc_sect_symtab) (struct objfile *objfile,
- struct minimal_symbol *msymbol,
- CORE_ADDR pc,
- struct obj_section *section,
- int warn_if_readin);
-
- /* 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);
-};