* dwarf2read.c (dw2_expand_symtabs_matching): Add basenames parameter
	to the file_matcher parameter.  Pass 0 to it.
	(dwarf2_create_include_psymtab): Copy also DIRNAME.
	* psymtab.c (partial_map_symtabs_matching_filename): Drop handling of
	NULL psymtab_to_fullname result.
	(psymtab_to_fullname): Remove variable r.  Never return NULL, assemble
	an expected filename instead.
	(expand_symtabs_matching_via_partial): Add basenames parameter to the
	file_matcher parameter.  Call also psymtab_to_fullname, after newly
	considering BASENAMES_MAY_DIFFER.
	* source.c (rewrite_source_path): Remove static.
	* source.h (rewrite_source_path): New declaration.
	* symfile.h (struct quick_symbol_functions): Add basenames parameter to
	the expand_symtabs_matching field.  Comment it.
	* symtab.c (file_matches): New function comment.  Add parameter
	basenames, implement it.
	(search_symbols_file_matches): Add basenames parameter.  Update the
	file_matches caller.
	(search_symbols): Match FILES also against symtab_to_fullname.
	Optimize it for BASENAMES_MAY_DIFFER.

gdb/testsuite/
	* gdb.base/fullpath-expand-func.c: New file.
	* gdb.base/fullpath-expand.c: New file.
	* gdb.base/fullpath-expand.exp: New file.
	* gdb.base/realname-expand-real.c: New file.
	* gdb.base/realname-expand.c: New file.
	* gdb.base/realname-expand.exp: New file.
This commit is contained in:
Jan Kratochvil
2013-02-03 16:20:20 +00:00
parent 56d397a382
commit fbd9ab7433
14 changed files with 280 additions and 30 deletions

View File

@ -3265,8 +3265,11 @@ sources_info (char *ignore, int from_tty)
do_cleanups (cleanups);
}
/* Compare FILE against all the NFILES entries of FILES. If BASENAMES is
non-zero compare only lbasename of FILES. */
static int
file_matches (const char *file, char *files[], int nfiles)
file_matches (const char *file, char *files[], int nfiles, int basenames)
{
int i;
@ -3274,7 +3277,9 @@ file_matches (const char *file, char *files[], int nfiles)
{
for (i = 0; i < nfiles; i++)
{
if (compare_filenames_for_search (file, files[i]))
if (compare_filenames_for_search (file, (basenames
? lbasename (files[i])
: files[i])))
return 1;
}
}
@ -3374,11 +3379,12 @@ struct search_symbols_data
/* A callback for expand_symtabs_matching. */
static int
search_symbols_file_matches (const char *filename, void *user_data)
search_symbols_file_matches (const char *filename, void *user_data,
int basenames)
{
struct search_symbols_data *data = user_data;
return file_matches (filename, data->files, data->nfiles);
return file_matches (filename, data->files, data->nfiles, basenames);
}
/* A callback for expand_symtabs_matching. */
@ -3587,7 +3593,14 @@ search_symbols (char *regexp, enum search_domain kind,
QUIT;
if (file_matches (real_symtab->filename, files, nfiles)
/* Check first sole REAL_SYMTAB->FILENAME. It does not need to be
a substring of symtab_to_fullname as it may contain "./" etc. */
if ((file_matches (real_symtab->filename, files, nfiles, 0)
|| ((basenames_may_differ
|| file_matches (lbasename (real_symtab->filename),
files, nfiles, 1))
&& file_matches (symtab_to_fullname (real_symtab),
files, nfiles, 0)))
&& ((!datum.preg_p
|| regexec (&datum.preg, SYMBOL_NATURAL_NAME (sym), 0,
NULL, 0) == 0)