mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-08-06 14:49:38 +08:00
gdb/
* 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:
23
gdb/symtab.c
23
gdb/symtab.c
@ -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)
|
||||
|
Reference in New Issue
Block a user