diff options
author | Tom Tromey <tromey@redhat.com> | 2012-01-16 20:40:53 +0000 |
---|---|---|
committer | Tom Tromey <tromey@redhat.com> | 2012-01-16 20:40:53 +0000 |
commit | 4aac40c83727ce9e8ec9d6968d589df0939c9827 (patch) | |
tree | 6dd54fa985311dd9b7d78ed28315dac7f1ffdf7e /gdb/dwarf2read.c | |
parent | cafec441901459c36ad92f1cd9eef648534ea53b (diff) | |
download | gdb-4aac40c83727ce9e8ec9d6968d589df0939c9827.zip gdb-4aac40c83727ce9e8ec9d6968d589df0939c9827.tar.gz gdb-4aac40c83727ce9e8ec9d6968d589df0939c9827.tar.bz2 |
gdb
* NEWS: Add item.
* symtab.h (compare_filenames_for_search): Declare.
* symtab.c (compare_filenames_for_search): New function.
(iterate_over_some_symtabs): Use it.
* symfile.h (struct quick_symbol_functions)
<map_symtabs_matching_filename>: Change spec.
* psymtab.c (partial_map_symtabs_matching_filename): Use
compare_filenames_for_search. Update for new spec.
* dwarf2read.c (dw2_map_symtabs_matching_filename): Use
compare_filenames_for_search. Update for new spec.
* breakpoint.c (clear_command): Use compare_filenames_for_search.
gdb/doc
* gdb.texinfo (Specify Location): Document relative file name
handling.
gdb/testsuite
* gdb.linespec/linespec.exp: Change some tests to use $decimal.
Add tests for relative directory.
Diffstat (limited to 'gdb/dwarf2read.c')
-rw-r--r-- | gdb/dwarf2read.c | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index afb4337..0ef0a5b 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -2403,8 +2403,8 @@ dw2_map_symtabs_matching_filename (struct objfile *objfile, const char *name, { int i; const char *name_basename = lbasename (name); - int check_basename = name_basename == name; - struct dwarf2_per_cu_data *base_cu = NULL; + int name_len = strlen (name); + int is_abs = IS_ABSOLUTE_PATH (name); dw2_setup (objfile); @@ -2427,7 +2427,9 @@ dw2_map_symtabs_matching_filename (struct objfile *objfile, const char *name, { const char *this_name = file_data->file_names[j]; - if (FILENAME_CMP (name, this_name) == 0) + if (FILENAME_CMP (name, this_name) == 0 + || (!is_abs && compare_filenames_for_search (this_name, + name, name_len))) { if (dw2_map_expand_apply (objfile, per_cu, name, full_path, real_path, @@ -2435,9 +2437,12 @@ dw2_map_symtabs_matching_filename (struct objfile *objfile, const char *name, return 1; } - if (check_basename && ! base_cu - && FILENAME_CMP (lbasename (this_name), name) == 0) - base_cu = per_cu; + { + if (dw2_map_expand_apply (objfile, per_cu, + name, full_path, real_path, + callback, data)) + return 1; + } /* Before we invoke realpath, which can get expensive when many files are involved, do a quick comparison of the basenames. */ @@ -2451,7 +2456,10 @@ dw2_map_symtabs_matching_filename (struct objfile *objfile, const char *name, file_data, j); if (this_real_name != NULL - && FILENAME_CMP (full_path, this_real_name) == 0) + && (FILENAME_CMP (full_path, this_real_name) == 0 + || (!is_abs + && compare_filenames_for_search (this_real_name, + name, name_len)))) { if (dw2_map_expand_apply (objfile, per_cu, name, full_path, real_path, @@ -2466,7 +2474,10 @@ dw2_map_symtabs_matching_filename (struct objfile *objfile, const char *name, file_data, j); if (this_real_name != NULL - && FILENAME_CMP (real_path, this_real_name) == 0) + && (FILENAME_CMP (real_path, this_real_name) == 0 + || (!is_abs + && compare_filenames_for_search (this_real_name, + name, name_len)))) { if (dw2_map_expand_apply (objfile, per_cu, name, full_path, real_path, @@ -2477,14 +2488,6 @@ dw2_map_symtabs_matching_filename (struct objfile *objfile, const char *name, } } - if (base_cu) - { - if (dw2_map_expand_apply (objfile, base_cu, - name, full_path, real_path, - callback, data)) - return 1; - } - return 0; } |