forked from Imagelibrary/binutils-gdb
gdb
* xcoffread.c: Include psymtab.h. (xcoff_sym_fns): Update. * symtab.h (struct partial_symbol): Remove. (PSYMBOL_DOMAIN, PSYMBOL_CLASS): Remove. (struct partial_symtab): Remove. (PSYMTAB_TO_SYMTAB): Remove. (lookup_partial_symbol, lookup_partial_symtab, find_pc_psymtab) (find_pc_sect_psymtab): Remove. (find_pc_sect_symtab_via_partial): Declare. (find_pc_psymtab, find_pc_sect_psymbol, psymtab_to_symtab) (find_main_psymtab): Remove. (find_main_filename): Declare. (fixup_psymbol_section): Remove. (fixup_section): Declare. * symtab.c: Include psymtab.h. (lookup_symtab): Use lookup_symtab method. (lookup_partial_symtab): Remove. (find_pc_sect_psymtab_closer): Remove. (find_pc_sect_psymtab): Remove. (find_pc_sect_symtab_via_partial): New function. (find_pc_psymtab, find_pc_sect_psymbol, find_pc_psymbol): Remove. (fixup_section): No longer static. (fixup_psymbol_section): Remove. (lookup_symbol_aux): Use lookup_symbol_aux_quick. (lookup_global_symbol_from_objfile): Likewise. (lookup_symbol_aux_psymtabs): Remove. (lookup_symbol_aux_quick): New function. (lookup_symbol_global): Use lookup_symbol_aux_quick. (lookup_partial_symbol): Remove. (basic_lookup_transparent_type_quick): New function. (basic_lookup_transparent_type): Use it. (find_main_psymtab): Remove. (find_main_filename): New function. (find_pc_sect_symtab): Use find_pc_sect_symtab method. (find_line_symtab): Use expand_symtabs_with_filename method. (output_partial_symbol_filename): New function. (sources_info): Use map_partial_symbol_filenames. (struct search_symbols_data): New type. (search_symbols_file_matches): New function. (search_symbols_name_matches): Likewise. (search_symbols): Use expand_symtabs_matching method. (struct add_name_data): Rename from add_macro_name_data. (add_macro_name): Update. (add_partial_symbol_name): New function. (default_make_symbol_completion_list): Use map_partial_symbol_names. (struct add_partial_symbol_name): New type. (maybe_add_partial_symtab_filename): New function. (make_source_files_completion_list): Use map_partial_symbol_filenames. (expand_line_sal): Use expand_symtabs_with_filename method. * symmisc.c: Include psymtab.h. (print_objfile_statistics): Use print_stats method. (dump_objfile): Use dump method. (dump_psymtab, maintenance_print_psymbols) (maintenance_info_psymtabs, maintenance_check_symtabs) (extend_psymbol_list): Remove. * symfile.h (struct quick_symbol_functions): New struct. (struct sym_fns) <qf>: New field. (sort_pst_symbols): Remove. (increment_reading_symtab): Declare. * symfile.c: Include psymtab.h. (compare_psymbols, sort_pst_symbols): Remove. (psymtab_to_symtab): Remove. (increment_reading_symtab): New function. (symbol_file_add_with_addrs_or_offsets): Use expand_all_symtabs method. (set_initial_language): Use find_main_filename. (allocate_psymtab, discard_psymtab, cashier_psymtab): Remove. (free_named_symtabs): Remove unused code. (start_psymtab_common, add_psymbol_to_bcache) (append_psymbol_to_list, add_psymbol_to_list, init_psymbol_list): Remove. * stack.c: Include psymtab.h, symfile.h. (backtrace_command_1): Use find_pc_sect_symtab_via_partial. * source.h (psymtab_to_fullname): Don't declare. * source.c: Include psymtab.h. (select_source_symtab): Use find_last_source_symtab method. (forget_cached_source_info): Use forget_cached_source_info method. (find_and_open_source): No longer static. (psymtab_to_fullname): Remove. * somread.c: Include psymtab.h. (som_sym_fns): Update. * psympriv.h: New file. * psymtab.h: New file. * psymtab.c: New file. * objfiles.h: (ALL_OBJFILE_PSYMTABS): Remove. (ALL_PSYMTABS, ALL_PSPACE_PSYMTABS): Likewise. * objfiles.c: Include psymtab.h. (objfile_relocate1): Use relocate method. (objfile_has_partial_symbols): Use has_symbols method. * mipsread.c: Include psymtab.h. (ecoff_sym_fns): Update. * mi/mi-cmd-file.c: Include psymtab.h. (print_partial_file_name): New function. (mi_cmd_file_list_exec_source_files): Use map_partial_symbol_filenames. * mdebugread.c: Include psympriv.h. * machoread.c: Include psympriv.h. (macho_sym_fns): Update. * m2-exp.y (yylex): Use lookup_symtab. * elfread.c: Include psympriv.h. (elf_sym_fns): Update. * dwarf2read.c: Include psympriv.h. * dbxread.c: Include psympriv.h. (aout_sym_fns): Update. * cp-support.c: Include psymtab.h. (read_in_psymtabs): Remove. (make_symbol_overload_list_qualified): Use expand_symtabs_for_function method. * coffread.c: Include psympriv.h. (coff_sym_fns): Update. * blockframe.c: Include psymtab.h. (find_pc_partial_function): Use find_pc_sect_symtab method. * ada-lang.h (ada_update_initial_language): Update. * ada-lang.c: Include psymtab.h. (ada_update_initial_language): Remove 'main_pst' argument. (ada_lookup_partial_symbol): Remove. (struct ada_psym_data): New type. (ada_add_psyms): New function. (ada_add_non_local_symbols): Use map_ada_symtabs method. (struct add_partial_datum): New type. (ada_add_partial_symbol_completions): New function. (ada_make_symbol_completion_list): Use map_partial_symbol_names. (ada_exception_support_info_sniffer): Update. * Makefile.in (SFILES): Add psymtab.c. (COMMON_OBS): Add psymtab.o. (HFILES_NO_SRCDIR): Add psymtab.h, psympriv.h. gdb/doc * gdbint.texinfo (Symbol Handling): Update.
This commit is contained in:
167
gdb/symfile.h
167
gdb/symfile.h
@@ -111,6 +111,165 @@ struct symfile_segment_data
|
||||
int *segment_info;
|
||||
};
|
||||
|
||||
/* 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);
|
||||
|
||||
/* Look up the symbol table, in OBJFILE, of a source file named
|
||||
NAME. If there is no '/' in the name, a match after a '/' in the
|
||||
symbol table's file name will also work. FULL_PATH is the
|
||||
absolute file name, and REAL_PATH is the same, run through
|
||||
gdb_realpath.
|
||||
|
||||
If no such symbol table can be found, returns 0.
|
||||
|
||||
Otherwise, sets *RESULT to the symbol table and returns 1. This
|
||||
might return 1 and set *RESULT to NULL if the requested file is
|
||||
an include file that does not have a symtab of its own. */
|
||||
int (*lookup_symtab) (struct objfile *objfile,
|
||||
const char *name,
|
||||
const char *full_path,
|
||||
const char *real_path,
|
||||
struct symtab **result);
|
||||
|
||||
/* 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. */
|
||||
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,
|
||||
struct section_offsets *new_offsets,
|
||||
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 the
|
||||
file name FILENAME. */
|
||||
void (*expand_symtabs_with_filename) (struct objfile *objfile,
|
||||
const char *filename);
|
||||
|
||||
/* Return the file name of the file holding the symbol in OBJFILE
|
||||
named NAME. If no such symbol exists in OBJFILE, return NULL. */
|
||||
char *(*find_symbol_file) (struct objfile *objfile, const char *name);
|
||||
|
||||
/* This method is specific to Ada. It walks the partial symbol
|
||||
tables of OBJFILE looking for a name match. WILD_MATCH and
|
||||
IS_NAME_SUFFIX are predicate functions that the implementation
|
||||
may call to check for a match.
|
||||
|
||||
This function is completely ad hoc and new implementations should
|
||||
refer to the psymtab implementation to see what to do. */
|
||||
void (*map_ada_symtabs) (struct objfile *objfile,
|
||||
int (*wild_match) (const char *, int, const char *),
|
||||
int (*is_name_suffix) (const char *),
|
||||
void (*callback) (struct objfile *,
|
||||
struct symtab *, void *),
|
||||
const char *name, int global,
|
||||
domain_enum namespace, int wild,
|
||||
void *data);
|
||||
|
||||
/* 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.
|
||||
|
||||
Otherwise, if the file is not skipped, then NAME_MATCHER is
|
||||
called for each symbol defined in the file. The symbol's
|
||||
"natural" name and DATA are passed to NAME_MATCHER.
|
||||
|
||||
If NAME_MATCHER returns zero, then this symbol is skipped.
|
||||
|
||||
Otherwise, if this symbol is not skipped, and it matches KIND,
|
||||
then 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 (*name_matcher) (const char *, void *),
|
||||
domain_enum 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 symbol defined in OBJFILE. FUN is the
|
||||
callback. It is passed the symbol's natural name, and the DATA
|
||||
passed to this function. */
|
||||
void (*map_symbol_names) (struct objfile *objfile,
|
||||
void (*fun) (const char *, void *),
|
||||
void *data);
|
||||
|
||||
/* Call a callback for every file defined in OBJFILE. FUN is the
|
||||
callback. It is passed the file's name, the file's full name,
|
||||
and the DATA passed to this function. */
|
||||
void (*map_symbol_filenames) (struct objfile *objfile,
|
||||
void (*fun) (const char *, const char *,
|
||||
void *),
|
||||
void *data);
|
||||
};
|
||||
|
||||
/* Structure to keep track of symbol reading functions for various
|
||||
object file types. */
|
||||
|
||||
@@ -174,6 +333,10 @@ struct sym_fns
|
||||
|
||||
bfd_byte *(*sym_relocate) (struct objfile *, asection *sectp, bfd_byte *buf);
|
||||
|
||||
/* The "quick" (aka partial) symbol functions for this symbol
|
||||
reader. */
|
||||
const struct quick_symbol_functions *qf;
|
||||
|
||||
/* Finds the next struct sym_fns. They are allocated and
|
||||
initialized in whatever module implements the functions pointed
|
||||
to; an initializer calls add_symtab_fns to add them to the global
|
||||
@@ -226,8 +389,6 @@ struct partial_symbol *add_psymbol_to_list (char *, int, int, domain_enum,
|
||||
|
||||
extern void init_psymbol_list (struct objfile *, int);
|
||||
|
||||
extern void sort_pst_symbols (struct partial_symtab *);
|
||||
|
||||
extern struct symtab *allocate_symtab (char *, struct objfile *);
|
||||
|
||||
extern void add_symtab_fns (struct sym_fns *);
|
||||
@@ -399,6 +560,8 @@ extern int symfile_map_offsets_to_segments (bfd *,
|
||||
struct symfile_segment_data *get_symfile_segment_data (bfd *abfd);
|
||||
void free_symfile_segment_data (struct symfile_segment_data *data);
|
||||
|
||||
extern struct cleanup *increment_reading_symtab (void);
|
||||
|
||||
/* From dwarf2read.c */
|
||||
|
||||
extern int dwarf2_has_info (struct objfile *);
|
||||
|
||||
Reference in New Issue
Block a user