aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog8
-rw-r--r--gdb/dwarf2read.c10
-rw-r--r--gdb/mi/mi-cmd-file.c3
-rw-r--r--gdb/psymtab.c14
-rw-r--r--gdb/psymtab.h3
-rw-r--r--gdb/symfile.h6
-rw-r--r--gdb/symtab.c6
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;