* NEWS: Mention new parameter basenames-may-differ.
[deliverable/binutils-gdb.git] / gdb / dwarf2read.c
index 5e5ee7c9c29598955e5d3e8bf34e417bba55a118..5e279de20ce3dec6dc4a72e479500e167023e2cd 100644 (file)
@@ -2445,7 +2445,8 @@ dw2_lookup_symtab (struct objfile *objfile, const char *name,
                   struct symtab **result)
 {
   int i;
-  int check_basename = lbasename (name) == name;
+  const char *name_basename = lbasename (name);
+  int check_basename = name_basename == name;
   struct dwarf2_per_cu_data *base_cu = NULL;
 
   dw2_setup (objfile);
@@ -2478,6 +2479,12 @@ dw2_lookup_symtab (struct objfile *objfile, const char *name,
              && FILENAME_CMP (lbasename (this_name), name) == 0)
            base_cu = per_cu;
 
+         /* Before we invoke realpath, which can get expensive when many
+            files are involved, do a quick comparison of the basenames.  */
+         if (! basenames_may_differ
+             && FILENAME_CMP (lbasename (this_name), name_basename) != 0)
+           continue;
+
          if (full_path != NULL)
            {
              const char *this_real_name = dw2_get_real_path (objfile,
This page took 0.029034 seconds and 4 git commands to generate.