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/source.c | |
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/source.c')
-rw-r--r-- | gdb/source.c | 77 |
1 files changed, 11 insertions, 66 deletions
diff --git a/gdb/source.c b/gdb/source.c index 2090326..dda5d1b 100644 --- a/gdb/source.c +++ b/gdb/source.c @@ -46,6 +46,8 @@ #include "ui-out.h" #include "readline/readline.h" +#include "psymtab.h" + #define OPEN_MODE (O_RDONLY | O_BINARY) #define FDOPEN_MODE FOPEN_RB @@ -229,8 +231,6 @@ select_source_symtab (struct symtab *s) { struct symtabs_and_lines sals; struct symtab_and_line sal; - struct partial_symtab *ps; - struct partial_symtab *cs_pst = 0; struct objfile *ofp; if (s) @@ -281,33 +281,13 @@ select_source_symtab (struct symtab *s) if (current_source_symtab) return; - /* How about the partial symbol tables? */ - ALL_OBJFILES (ofp) - { - for (ps = ofp->psymtabs; ps != NULL; ps = ps->next) - { - const char *name = ps->filename; - int len = strlen (name); - if (!(len > 2 && (strcmp (&name[len - 2], ".h") == 0 - || strcmp (name, "<<C++-namespaces>>") == 0))) - cs_pst = ps; - } - } - if (cs_pst) - { - if (cs_pst->readin) - { - internal_error (__FILE__, __LINE__, - _("select_source_symtab: " - "readin pst found and no symtabs.")); - } - else - { - current_source_pspace = current_program_space; - current_source_symtab = PSYMTAB_TO_SYMTAB (cs_pst); - } - } + { + if (ofp->sf) + s = ofp->sf->qf->find_last_source_symtab (ofp); + if (s) + current_source_symtab = s; + } if (current_source_symtab) return; @@ -332,7 +312,6 @@ forget_cached_source_info (void) struct program_space *pspace; struct symtab *s; struct objfile *objfile; - struct partial_symtab *pst; ALL_PSPACES (pspace) ALL_PSPACE_OBJFILES (pspace, objfile) @@ -351,14 +330,8 @@ forget_cached_source_info (void) } } - ALL_OBJFILE_PSYMTABS (objfile, pst) - { - if (pst->fullname != NULL) - { - xfree (pst->fullname); - pst->fullname = NULL; - } - } + if (objfile->sf) + objfile->sf->qf->forget_cached_source_info (objfile); } last_source_visited = NULL; @@ -964,7 +937,7 @@ rewrite_source_path (const char *path) An invalid file descriptor is returned. ( the return value is negative ) FULLNAME is set to NULL. */ -static int +int find_and_open_source (const char *filename, const char *dirname, char **fullname) @@ -1094,34 +1067,6 @@ symtab_to_fullname (struct symtab *s) return NULL; } - -/* Finds the fullname that a partial_symtab represents. - - If this functions finds the fullname, it will save it in ps->fullname - and it will also return the value. - - If this function fails to find the file that this partial_symtab represents, - NULL will be returned and ps->fullname will be set to NULL. */ -char * -psymtab_to_fullname (struct partial_symtab *ps) -{ - int r; - - if (!ps) - return NULL; - - /* Don't check ps->fullname here, the file could have been - deleted/moved/..., look for it again */ - r = find_and_open_source (ps->filename, ps->dirname, &ps->fullname); - - if (r >= 0) - { - close (r); - return ps->fullname; - } - - return NULL; -} /* Create and initialize the table S->line_charpos that records the positions of the lines in the source file, which is assumed |