diff options
author | Jan Kratochvil <jan.kratochvil@redhat.com> | 2013-02-03 16:20:20 +0000 |
---|---|---|
committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2013-02-03 16:20:20 +0000 |
commit | fbd9ab743390e50f3f829f4d634deb931cc2b819 (patch) | |
tree | 0cc29024ce3314c46ba19bed5702e4f86ab6f0c8 /gdb/symtab.c | |
parent | 56d397a3824d826cdbaa02dba633bd86da6308c5 (diff) | |
download | gdb-fbd9ab743390e50f3f829f4d634deb931cc2b819.zip gdb-fbd9ab743390e50f3f829f4d634deb931cc2b819.tar.gz gdb-fbd9ab743390e50f3f829f4d634deb931cc2b819.tar.bz2 |
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.
Diffstat (limited to 'gdb/symtab.c')
-rw-r--r-- | gdb/symtab.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/gdb/symtab.c b/gdb/symtab.c index 072b3da..57441c1 100644 --- a/gdb/symtab.c +++ b/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) |