gdb, cp: update add_symbol_overload_list_qualified
authorMarkus Metzger <markus.t.metzger@intel.com>
Tue, 26 Apr 2022 13:11:09 +0000 (15:11 +0200)
committerMarkus Metzger <markus.t.metzger@intel.com>
Tue, 18 Oct 2022 12:16:10 +0000 (14:16 +0200)
Iterate over objfiles in search order using the objfile of the selected
block as current_objfile so the iteration can stay inside the block's
linker namespace.

gdb/cp-support.c

index 1891bac4f9b5d0cf40232741178f0ee0e87b9f5a..77895a8bc98a4fe4a77b0733071f436237777b35 100644 (file)
@@ -1460,30 +1460,30 @@ add_symbol_overload_list_qualified (const char *func_name,
   /* Go through the symtabs and check the externs and statics for
      symbols which match.  */
 
-  for (objfile *objfile : current_program_space->objfiles ())
-    {
-      for (compunit_symtab *cust : objfile->compunits ())
-       {
-         QUIT;
-         const block *b = cust->blockvector ()->global_block ();
-         add_symbol_overload_list_block (func_name, b, overload_list);
-       }
-    }
-
-  for (objfile *objfile : current_program_space->objfiles ())
-    {
-      for (compunit_symtab *cust : objfile->compunits ())
-       {
-         QUIT;
-         const block *b = cust->blockvector ()->static_block ();
-
-         /* Don't do this block twice.  */
-         if (b == surrounding_static_block)
-           continue;
-
-         add_symbol_overload_list_block (func_name, b, overload_list);
-       }
-    }
+  const block *block = get_selected_block (0);
+  struct objfile *current_objfile = block ? block_objfile (block) : nullptr;
+
+  gdbarch_iterate_over_objfiles_in_search_order
+    (current_objfile ? current_objfile->arch () : target_gdbarch (),
+     [func_name, surrounding_static_block, &overload_list]
+     (struct objfile *obj)
+       {
+        for (compunit_symtab *cust : obj->compunits ())
+          {
+            QUIT;
+            const struct block *b = cust->blockvector ()->global_block ();
+            add_symbol_overload_list_block (func_name, b, overload_list);
+
+            b = cust->blockvector ()->static_block ();
+            /* Don't do this block twice.  */
+            if (b == surrounding_static_block)
+              continue;
+
+            add_symbol_overload_list_block (func_name, b, overload_list);
+          }
+
+        return 0;
+       }, current_objfile);
 }
 
 /* Lookup the rtti type for a class name.  */