jit: c++-ify gdb_block
[deliverable/binutils-gdb.git] / gdb / progspace.c
index d1bf0c6aba3dd5a546661da210101d05fa572f27..1d8aaea2caa8d13737ba1be5e021be422f7cc0eb 100644 (file)
@@ -23,6 +23,7 @@
 #include "arch-utils.h"
 #include "gdbcore.h"
 #include "solib.h"
+#include "solist.h"
 #include "gdbthread.h"
 #include "inferior.h"
 #include <algorithm>
@@ -157,16 +158,37 @@ program_space::~program_space ()
 /* See progspace.h.  */
 
 void
-program_space::add_objfile (struct objfile *objfile, struct objfile *before)
+program_space::free_all_objfiles ()
+{
+  struct so_list *so;
+
+  /* Any objfile reference would become stale.  */
+  for (so = master_so_list (); so; so = so->next)
+    gdb_assert (so->objfile == NULL);
+
+  while (!objfiles_list.empty ())
+    objfiles_list.front ()->unlink ();
+
+  clear_symtab_users (0);
+}
+
+/* See progspace.h.  */
+
+void
+program_space::add_objfile (std::shared_ptr<objfile> &&objfile,
+                           struct objfile *before)
 {
   if (before == nullptr)
-    objfiles_list.push_back (objfile);
+    objfiles_list.push_back (std::move (objfile));
   else
     {
-      auto iter = std::find (objfiles_list.begin (), objfiles_list.end (),
-                            before);
+      auto iter = std::find_if (objfiles_list.begin (), objfiles_list.end (),
+                               [=] (const std::shared_ptr<::objfile> &objf)
+                               {
+                                 return objf.get () == before;
+                               });
       gdb_assert (iter != objfiles_list.end ());
-      objfiles_list.insert (iter, objfile);
+      objfiles_list.insert (iter, std::move (objfile));
     }
 }
 
@@ -175,8 +197,11 @@ program_space::add_objfile (struct objfile *objfile, struct objfile *before)
 void
 program_space::remove_objfile (struct objfile *objfile)
 {
-  auto iter = std::find (objfiles_list.begin (), objfiles_list.end (),
-                        objfile);
+  auto iter = std::find_if (objfiles_list.begin (), objfiles_list.end (),
+                           [=] (const std::shared_ptr<::objfile> &objf)
+                           {
+                             return objf.get () == objfile;
+                           });
   gdb_assert (iter != objfiles_list.end ());
   objfiles_list.erase (iter);
 
This page took 0.025109 seconds and 4 git commands to generate.