- const struct debug_sym_fns_data *debug_data
- = ((const struct debug_sym_fns_data *)
- objfile_data (objfile, symfile_debug_objfile_data_key));
-
- fprintf_filtered (gdb_stdlog,
- "qf->map_symtabs_matching_filename (%s, \"%s\", \"%s\", %s)\n",
- objfile_debug_name (objfile), name,
- real_path ? real_path : NULL,
- host_address_to_string (&callback));
-
- bool retval = (debug_data->real_sf->qf->map_symtabs_matching_filename
- (objfile, name, real_path, callback));
+ if (debug_symfile)
+ fprintf_filtered (gdb_stdlog,
+ "qf->map_symtabs_matching_filename (%s, \"%s\", "
+ "\"%s\", %s)\n",
+ objfile_debug_name (this), name,
+ real_path ? real_path : NULL,
+ host_address_to_string (&callback));
+
+ bool retval = true;
+ const char *name_basename = lbasename (name);
+
+ auto match_one_filename = [&] (const char *filename, bool basenames)
+ {
+ if (compare_filenames_for_search (filename, name))
+ return true;
+ if (basenames && FILENAME_CMP (name_basename, filename) == 0)
+ return true;
+ if (real_path != nullptr && IS_ABSOLUTE_PATH (filename)
+ && IS_ABSOLUTE_PATH (real_path))
+ return filename_cmp (filename, real_path) == 0;
+ return false;
+ };
+
+ compunit_symtab *last_made = this->compunit_symtabs;
+
+ auto on_expansion = [&] (compunit_symtab *symtab)
+ {
+ /* The callback to iterate_over_some_symtabs returns false to keep
+ going and true to continue, so we have to invert the result
+ here, for expand_symtabs_matching. */
+ bool result = !iterate_over_some_symtabs (name, real_path,
+ this->compunit_symtabs,
+ last_made,
+ callback);
+ last_made = this->compunit_symtabs;
+ return result;
+ };
+
+ for (const auto &iter : qf)
+ {
+ if (!iter->expand_symtabs_matching (this,
+ match_one_filename,
+ nullptr,
+ nullptr,
+ on_expansion,
+ (SEARCH_GLOBAL_BLOCK
+ | SEARCH_STATIC_BLOCK),
+ UNDEF_DOMAIN,
+ ALL_DOMAIN))
+ {
+ retval = false;
+ break;
+ }
+ }