Fix typo.
[deliverable/binutils-gdb.git] / gdb / progspace.c
index 259e641d0b2ae9bf0f6da66cf359fe8288f7af1b..1065c277b9207c09b897a80f40fa6a5713e8b348 100644 (file)
@@ -1,6 +1,6 @@
 /* Program and address space management, for GDB, the GNU debugger.
 
-   Copyright (C) 2009, 2010 Free Software Foundation, Inc.
+   Copyright (C) 2009-2012 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -149,6 +149,7 @@ release_program_space (struct program_space *pspace)
     free_address_space (pspace->aspace);
   resize_section_table (&pspace->target_sections,
                        -resize_section_table (&pspace->target_sections, 0));
+  clear_program_space_solib_cache (pspace);
     /* Discard any data modules have associated with the PSPACE.  */
   program_space_free_data (pspace);
   xfree (pspace);
@@ -186,7 +187,6 @@ remove_program_space (struct program_space *pspace)
 struct program_space *
 clone_program_space (struct program_space *dest, struct program_space *src)
 {
-  struct program_space *new_pspace;
   struct cleanup *old_chain;
 
   old_chain = save_current_program_space ();
@@ -228,6 +228,7 @@ static void
 restore_program_space (void *arg)
 {
   struct program_space *saved_pspace = arg;
+
   set_current_program_space (saved_pspace);
 }
 
@@ -240,6 +241,7 @@ save_current_program_space (void)
 {
   struct cleanup *old_chain = make_cleanup (restore_program_space,
                                            current_program_space);
+
   return old_chain;
 }
 
@@ -248,8 +250,6 @@ save_current_program_space (void)
 static int
 pspace_empty_p (struct program_space *pspace)
 {
-  struct inferior *inf;
-
   if (find_inferior_for_program_space (pspace) != NULL)
       return 0;
 
@@ -398,7 +398,7 @@ maintenance_info_program_spaces_command (char *args, int from_tty)
        error (_("program space ID %d not known."), requested);
     }
 
-  print_program_space (uiout, requested);
+  print_program_space (current_uiout, requested);
 }
 
 /* Simply returns the count of program spaces.  */
@@ -430,24 +430,31 @@ void
 update_address_spaces (void)
 {
   int shared_aspace = gdbarch_has_shared_address_space (target_gdbarch);
-  struct address_space *aspace = NULL;
   struct program_space *pspace;
+  struct inferior *inf;
 
   init_address_spaces ();
 
-  ALL_PSPACES (pspace)
+  if (shared_aspace)
     {
-      free_address_space (pspace->aspace);
+      struct address_space *aspace = new_address_space ();
 
-      if (shared_aspace)
-       {
-         if (aspace == NULL)
-           aspace = new_address_space ();
-         pspace->aspace = aspace;
-       }
-      else
-       pspace->aspace = new_address_space ();
+      free_address_space (current_program_space->aspace);
+      ALL_PSPACES (pspace)
+       pspace->aspace = aspace;
     }
+  else
+    ALL_PSPACES (pspace)
+      {
+       free_address_space (pspace->aspace);
+       pspace->aspace = new_address_space ();
+      }
+
+  for (inf = inferior_list; inf; inf = inf->next)
+    if (gdbarch_has_global_solist (target_gdbarch))
+      inf->aspace = maybe_new_address_space ();
+    else
+      inf->aspace = inf->pspace->aspace;
 }
 
 /* Save the current program space so that it may be restored by a later
@@ -497,6 +504,19 @@ switch_to_program_space_and_thread (struct program_space *pspace)
 
 \f
 
+/* See progspace.h.  */
+
+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;
+}
+
+\f
+
 /* Keep a registry of per-program_space data-pointers required by other GDB
    modules.  */
 
@@ -590,7 +610,8 @@ set_program_space_data (struct program_space *pspace,
 }
 
 void *
-program_space_data (struct program_space *pspace, const struct program_space_data *data)
+program_space_data (struct program_space *pspace,
+                   const struct program_space_data *data)
 {
   gdb_assert (data->index < pspace->num_data);
   return pspace->data[data->index];
@@ -602,8 +623,8 @@ void
 initialize_progspace (void)
 {
   add_cmd ("program-spaces", class_maintenance,
-          maintenance_info_program_spaces_command, _("\
-Info about currently known program spaces."),
+          maintenance_info_program_spaces_command,
+          _("Info about currently known program spaces."),
           &maintenanceinfolist);
 
   /* There's always one program space.  Note that this function isn't
This page took 0.027152 seconds and 4 git commands to generate.