diff options
author | Tom Tromey <tromey@redhat.com> | 2010-03-10 18:20:08 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2010-03-10 18:20:08 +0000 |
commit | ccefe4c44c4b2d1bc88757fba90ff59eb017a074 (patch) | |
tree | 829f5399a69d6926d7ff1708b43ff81fb4faf453 /gdb/symfile.h | |
parent | a2a5469e7999a8e4e713e11bfd191c11a422e1e8 (diff) | |
download | gdb-ccefe4c44c4b2d1bc88757fba90ff59eb017a074.zip gdb-ccefe4c44c4b2d1bc88757fba90ff59eb017a074.tar.gz gdb-ccefe4c44c4b2d1bc88757fba90ff59eb017a074.tar.bz2 |
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.
Diffstat (limited to 'gdb/symfile.h')
-rw-r--r-- | gdb/symfile.h | 167 |
1 files changed, 165 insertions, 2 deletions
diff --git a/gdb/symfile.h b/gdb/symfile.h index fe95255..a8effda 100644 --- a/gdb/symfile.h +++ b/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 *); |