diff options
-rw-r--r-- | gdb/ChangeLog | 8 | ||||
-rw-r--r-- | gdb/dwarf2read.c | 10 | ||||
-rw-r--r-- | gdb/mi/mi-cmd-file.c | 3 | ||||
-rw-r--r-- | gdb/psymtab.c | 14 | ||||
-rw-r--r-- | gdb/psymtab.h | 3 | ||||
-rw-r--r-- | gdb/symfile.h | 6 | ||||
-rw-r--r-- | gdb/symtab.c | 6 |
7 files changed, 37 insertions, 13 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 63deaf1..8aaf0dd 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -10,6 +10,14 @@ 2011-11-10 Doug Evans <dje@google.com> + * dwarf2read.c (dw2_map_symbol_filenames): New parameter + `need_fullname'. + * psymtab.c (map_symbol_filenames_psymtab): Ditto. + (map_partial_symbol_filenames): Ditto. All callers updated. + * psymtab.h (map_partial_symbol_filenames): Update prototype. + * symfile.h (struct quick_symbol_functions, map_symbol_filenames): New + parameter need_fullname. + * psymtab.c (psymtab_to_fullname): Use cached copy if it exists. * source.c (symtab_to_fullname): Ditto. diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index 5a3e469..5e5ee7c 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -2811,7 +2811,7 @@ dw2_find_pc_sect_symtab (struct objfile *objfile, static void dw2_map_symbol_filenames (struct objfile *objfile, symbol_filename_ftype *fun, - void *data) + void *data, int need_fullname) { int i; @@ -2833,8 +2833,12 @@ dw2_map_symbol_filenames (struct objfile *objfile, symbol_filename_ftype *fun, for (j = 0; j < file_data->num_file_names; ++j) { - const char *this_real_name = dw2_get_real_path (objfile, file_data, - j); + const char *this_real_name; + + if (need_fullname) + this_real_name = dw2_get_real_path (objfile, file_data, j); + else + this_real_name = NULL; (*fun) (file_data->file_names[j], this_real_name, data); } } diff --git a/gdb/mi/mi-cmd-file.c b/gdb/mi/mi-cmd-file.c index 22cb995..ff86588 100644 --- a/gdb/mi/mi-cmd-file.c +++ b/gdb/mi/mi-cmd-file.c @@ -109,7 +109,8 @@ mi_cmd_file_list_exec_source_files (char *command, char **argv, int argc) ui_out_end (uiout, ui_out_type_tuple); } - map_partial_symbol_filenames (print_partial_file_name, NULL); + map_partial_symbol_filenames (print_partial_file_name, NULL, + 1 /*need_fullname*/); ui_out_end (uiout, ui_out_type_list); } diff --git a/gdb/psymtab.c b/gdb/psymtab.c index 38adca2..6012118 100644 --- a/gdb/psymtab.c +++ b/gdb/psymtab.c @@ -1082,7 +1082,8 @@ read_psymtabs_with_filename (struct objfile *objfile, const char *filename) static void map_symbol_filenames_psymtab (struct objfile *objfile, - symbol_filename_ftype *fun, void *data) + symbol_filename_ftype *fun, void *data, + int need_fullname) { struct partial_symtab *ps; @@ -1094,7 +1095,10 @@ map_symbol_filenames_psymtab (struct objfile *objfile, continue; QUIT; - fullname = psymtab_to_fullname (ps); + if (need_fullname) + fullname = psymtab_to_fullname (ps); + else + fullname = NULL; (*fun) (ps->filename, fullname, data); } } @@ -1921,13 +1925,15 @@ expand_partial_symbol_names (int (*fun) (const char *, void *), void *data) } void -map_partial_symbol_filenames (symbol_filename_ftype *fun, void *data) +map_partial_symbol_filenames (symbol_filename_ftype *fun, void *data, + int need_fullname) { struct objfile *objfile; ALL_OBJFILES (objfile) { if (objfile->sf) - objfile->sf->qf->map_symbol_filenames (objfile, fun, data); + objfile->sf->qf->map_symbol_filenames (objfile, fun, data, + need_fullname); } } diff --git a/gdb/psymtab.h b/gdb/psymtab.h index 4d7f6d6..de292c5 100644 --- a/gdb/psymtab.h +++ b/gdb/psymtab.h @@ -33,7 +33,8 @@ extern struct bcache *psymbol_bcache_get_bcache (struct psymbol_bcache *); void expand_partial_symbol_names (int (*fun) (const char *, void *), void *data); -void map_partial_symbol_filenames (symbol_filename_ftype *fun, void *data); +void map_partial_symbol_filenames (symbol_filename_ftype *fun, void *data, + int need_fullname); extern const struct quick_symbol_functions psym_functions; diff --git a/gdb/symfile.h b/gdb/symfile.h index 624df76..accd20e 100644 --- a/gdb/symfile.h +++ b/gdb/symfile.h @@ -289,9 +289,11 @@ struct quick_symbol_functions /* 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, and the DATA passed to this function. */ + 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); + symbol_filename_ftype *fun, void *data, + int need_fullname); }; /* Structure to keep track of symbol reading functions for various diff --git a/gdb/symtab.c b/gdb/symtab.c index f881226..1628f31 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -2881,7 +2881,8 @@ sources_info (char *ignore, int from_tty) "will be read in on demand:\n\n"); first = 1; - map_partial_symbol_filenames (output_partial_symbol_filename, &first); + map_partial_symbol_filenames (output_partial_symbol_filename, &first, + 1 /*need_fullname*/); printf_filtered ("\n"); } @@ -4314,7 +4315,8 @@ make_source_files_completion_list (char *text, char *word) datum.list = &list; datum.list_used = &list_used; datum.list_alloced = &list_alloced; - map_partial_symbol_filenames (maybe_add_partial_symtab_filename, &datum); + map_partial_symbol_filenames (maybe_add_partial_symtab_filename, &datum, + 0 /*need_fullname*/); discard_cleanups (back_to); return list; |