gdb, compile: unlink objfile stored in module
authorMarkus Metzger <markus.t.metzger@intel.com>
Mon, 11 Apr 2022 13:12:33 +0000 (15:12 +0200)
committerMarkus Metzger <markus.t.metzger@intel.com>
Tue, 18 Oct 2022 12:16:09 +0000 (14:16 +0200)
When cleaning up after a compile command, we iterate over all objfiles and
unlink the first objfile with the same name as the one we compiled.

Since we already store a pointer to that objfile in the module and use it
to get the name we're comparing against, there's no reason to iterate, at
all.  We can simply use that objfile.

This further avoids potential issues when an objfile with the same name is
loaded into a different linker namespace.

gdb/compile/compile-object-run.c

index 6fcd10b29a44ad167772bbb75ff2bd1b43d20860..af761e8782c24c7ee63ce0c43e544128c4f64453 100644 (file)
@@ -79,21 +79,18 @@ do_module_cleanup (void *arg, int registers_valid)
        }
     }
 
+  objfile *objfile = data->module->objfile;
+  gdb_assert (objfile != nullptr);
+
   /* We have to make a copy of the name so that we can unlink the
      underlying file -- removing the objfile will cause the name to be
      freed, so we can't simply keep a reference to it.  */
-  std::string objfile_name_s = objfile_name (data->module->objfile);
-  for (objfile *objfile : current_program_space->objfiles ())
-    if ((objfile->flags & OBJF_USERLOADED) == 0
-       && objfile_name_s == objfile_name (objfile))
-      {
-       objfile->unlink ();
-
-       /* It may be a bit too pervasive in this dummy_frame dtor callback.  */
-       clear_symtab_users (0);
-
-       break;
-      }
+  std::string objfile_name_s = objfile_name (objfile);
+
+  objfile->unlink ();
+
+  /* It may be a bit too pervasive in this dummy_frame dtor callback.  */
+  clear_symtab_users (0);
 
   /* Delete the .c file.  */
   unlink (data->module->source_file.c_str ());