Introduce program_space::remove_objfile
[deliverable/binutils-gdb.git] / gdb / progspace.c
index f6da7e7da28ddb6bcf5111ef39903fd5a3b4982a..e6c4f55c4e8b1c39dda555ff7a019d3ec84f4a89 100644 (file)
@@ -1,6 +1,6 @@
 /* Program and address space management, for GDB, the GNU debugger.
 
-   Copyright (C) 2009-2018 Free Software Foundation, Inc.
+   Copyright (C) 2009-2019 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -24,6 +24,7 @@
 #include "gdbcore.h"
 #include "solib.h"
 #include "gdbthread.h"
+#include "inferior.h"
 
 /* The last program space number assigned.  */
 int last_program_space_num = 0;
@@ -152,6 +153,53 @@ program_space::~program_space ()
   program_space_free_data (this);
 }
 
+/* See progspace.h.  */
+
+void
+program_space::add_objfile (struct objfile *objfile, struct objfile *before)
+{
+  for (struct objfile **objp = &objfiles_head;
+       *objp != NULL;
+       objp = &((*objp)->next))
+    {
+      if (*objp == before)
+       {
+         objfile->next = *objp;
+         *objp = objfile;
+         return;
+       }
+    }
+
+  internal_error (__FILE__, __LINE__,
+                 _("put_objfile_before: before objfile not in list"));
+
+}
+
+/* See progspace.h.  */
+
+void
+program_space::remove_objfile (struct objfile *objfile)
+{
+  struct objfile **objpp;
+
+  for (objpp = &object_files; *objpp != NULL; objpp = &((*objpp)->next))
+    {
+      if (*objpp == objfile)
+       {
+         *objpp = (*objpp)->next;
+         objfile->next = NULL;
+
+         if (objfile == symfile_object_file)
+           symfile_object_file = NULL;
+
+         return;
+       }
+    }
+
+  internal_error (__FILE__, __LINE__,
+                 _("remove_objfile: objfile already unlinked"));
+}
+
 /* Copies program space SRC to DEST.  Copies the main executable file,
    and the main symbol file.  Returns DEST.  */
 
@@ -166,7 +214,8 @@ clone_program_space (struct program_space *dest, struct program_space *src)
     exec_file_attach (src->pspace_exec_filename, 0);
 
   if (src->symfile_object_file != NULL)
-    symbol_file_add_main (objfile_name (src->symfile_object_file), 0);
+    symbol_file_add_main (objfile_name (src->symfile_object_file),
+                         SYMFILE_DEFER_BP_RESET);
 
   return dest;
 }
@@ -270,7 +319,7 @@ print_program_space (struct ui_out *uiout, int requested)
       else
        uiout->field_skip ("current");
 
-      uiout->field_int ("id", pspace->num);
+      uiout->field_signed ("id", pspace->num);
 
       if (pspace->pspace_exec_filename)
        uiout->field_string ("exec", pspace->pspace_exec_filename);
@@ -291,12 +340,12 @@ print_program_space (struct ui_out *uiout, int requested)
                printed_header = 1;
                printf_filtered ("\n\tBound inferiors: ID %d (%s)",
                                 inf->num,
-                                target_pid_to_str (pid_to_ptid (inf->pid)));
+                                target_pid_to_str (ptid_t (inf->pid)).c_str ());
              }
            else
              printf_filtered (", ID %d (%s)",
                               inf->num,
-                              target_pid_to_str (pid_to_ptid (inf->pid)));
+                              target_pid_to_str (ptid_t (inf->pid)).c_str ());
          }
 
       uiout->text ("\n");
@@ -399,10 +448,8 @@ update_address_spaces (void)
 void
 clear_program_space_solib_cache (struct program_space *pspace)
 {
-  VEC_free (so_list_ptr, pspace->added_solibs);
-
-  free_char_ptr_vec (pspace->deleted_solibs);
-  pspace->deleted_solibs = NULL;
+  pspace->added_solibs.clear ();
+  pspace->deleted_solibs.clear ();
 }
 
 \f
This page took 0.02667 seconds and 4 git commands to generate.