2013-07-22 Doug Evans <dje@google.com>
authorJan Kratochvil <jan.kratochvil@redhat.com>
Mon, 22 Jul 2013 20:51:11 +0000 (20:51 +0000)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Mon, 22 Jul 2013 20:51:11 +0000 (20:51 +0000)
gdb/
* exec.h (remove_target_sections): Delete arg abfd.
* exec.c (remove_target_sections): Delete arg abfd.
(exec_close): Update call to remove_target_sections.
* solib.c (update_solib_list): Ditto.
(reload_shared_libraries_1): Ditto.
(clear_solib): Ditto, and unconditionally call remove_target_sections.

gdb/ChangeLog
gdb/exec.c
gdb/exec.h
gdb/solib.c
gdb/target.h

index b0d3e5506b36acbc4df0100a415b01884386059d..54e039545696f9b3f1026255b2a7ca6536a881d1 100644 (file)
@@ -1,3 +1,12 @@
+2013-07-22  Doug Evans  <dje@google.com>
+
+       * exec.h (remove_target_sections): Delete arg abfd.
+       * exec.c (remove_target_sections): Delete arg abfd.
+       (exec_close): Update call to remove_target_sections.
+       * solib.c (update_solib_list): Ditto.
+       (reload_shared_libraries_1): Ditto.
+       (clear_solib): Ditto, and unconditionally call remove_target_sections.
+
 2013-07-22  Tom Tromey  <tromey@redhat.com>
 
        * solib-som.c (som_open_symbol_file_object): Call do_cleanups.
index 5b256ef01f1123bcbb5bcc663e4d660337242ab9..14ff6d7b8c67dba4f86edb8c1083569e75e39709 100644 (file)
@@ -101,7 +101,7 @@ exec_close (void)
       exec_bfd = NULL;
       exec_bfd_mtime = 0;
 
-      remove_target_sections (&exec_bfd, abfd);
+      remove_target_sections (&exec_bfd);
     }
 }
 
@@ -339,7 +339,7 @@ add_to_section_table (bfd *abfd, struct bfd_section *asect,
   if (!(aflag & SEC_ALLOC))
     return;
 
-  (*table_pp)->key = NULL;
+  (*table_pp)->owner = NULL;
   (*table_pp)->the_bfd_section = asect;
   (*table_pp)->addr = bfd_section_vma (abfd, asect);
   (*table_pp)->endaddr = (*table_pp)->addr + bfd_section_size (abfd, asect);
@@ -397,7 +397,7 @@ build_section_table (struct bfd *some_bfd, struct target_section **start,
    current set of target sections.  */
 
 void
-add_target_sections (void *key,
+add_target_sections (void *owner,
                     struct target_section *sections,
                     struct target_section *sections_end)
 {
@@ -414,7 +414,7 @@ add_target_sections (void *key,
       for (i = 0; i < count; ++i)
        {
          table->sections[space + i] = sections[i];
-         table->sections[space + i].key = key;
+         table->sections[space + i].owner = owner;
        }
 
       /* If these are the first file sections we can provide memory
@@ -427,17 +427,20 @@ add_target_sections (void *key,
     }
 }
 
-/* Remove all target sections taken from ABFD.  */
+/* Remove all target sections owned by OWNER.
+   OWNER must be the same value passed to add_target_sections.  */
 
 void
-remove_target_sections (void *key, bfd *abfd)
+remove_target_sections (void *owner)
 {
   struct target_section *src, *dest;
   struct target_section_table *table = current_target_sections;
 
+  gdb_assert (owner != NULL);
+
   dest = table->sections;
   for (src = table->sections; src < table->sections_end; src++)
-    if (src->key != key || src->the_bfd_section->owner != abfd)
+    if (src->owner != owner)
       {
        /* Keep this section.  */
        if (dest < src)
index f5a4077ab302841ff26268f4ff5da065e2a82a8f..21ccba8c68b6794f54473d7ebcbc3151db95fa8f 100644 (file)
@@ -81,14 +81,14 @@ extern int section_table_xfer_memory_partial (gdb_byte *, const gdb_byte *,
 /* Set the loaded address of a section.  */
 extern void exec_set_section_address (const char *, int, CORE_ADDR);
 
-/* Remove all target sections taken from ABFD.  */
+/* Remove all target sections owned by OWNER.  */
 
-extern void remove_target_sections (void *key, bfd *abfd);
+extern void remove_target_sections (void *owner);
 
 /* Add the sections array defined by [SECTIONS..SECTIONS_END[ to the
    current set of target sections.  */
 
-extern void add_target_sections (void *key,
+extern void add_target_sections (void *owner,
                                 struct target_section *sections,
                                 struct target_section *sections_end);
 
index c987fe59507f91e238e7f2cd491bfbcbedf38c2a..fd266876a74852b4b9377c98b26a0878864d0187 100644 (file)
@@ -770,7 +770,7 @@ update_solib_list (int from_tty, struct target_ops *target)
 
          /* Some targets' section tables might be referring to
             sections from so->abfd; remove them.  */
-         remove_target_sections (gdb, gdb->abfd);
+         remove_target_sections (gdb);
 
          free_so (gdb);
          gdb = *gdb_link;
@@ -1151,8 +1151,7 @@ clear_solib (void)
 
       so_list_head = so->next;
       observer_notify_solib_unloaded (so);
-      if (so->abfd)
-       remove_target_sections (so, so->abfd);
+      remove_target_sections (so);
       free_so (so);
     }
 
@@ -1276,7 +1275,7 @@ reload_shared_libraries_1 (int from_tty)
          if (so->objfile && ! (so->objfile->flags & OBJF_USERLOADED)
              && !solib_used (so))
            free_objfile (so->objfile);
-         remove_target_sections (so, so->abfd);
+         remove_target_sections (so);
          clear_so (so);
        }
 
index 21e5792ad784d3f8d26f356e286da8dedc7b73b2..9ea87bb7be8089948bc4926a3e1ba635c52d6192 100644 (file)
@@ -1902,11 +1902,12 @@ struct target_section
 
     struct bfd_section *the_bfd_section;
 
-    /* A given BFD may appear multiple times in the target section
-       list, so each BFD is associated with a given key.  The key is
-       just some convenient pointer that can be used to differentiate
-       the BFDs.  These are managed only by convention.  */
-    void *key;
+    /* The "owner" of the section.
+       It can be any unique value.  It is set by add_target_sections
+       and used by remove_target_sections.
+       For example, for executables it is a pointer to exec_bfd and
+       for shlibs it is the so_list pointer.  */
+    void *owner;
   };
 
 /* Holds an array of target sections.  Defined by [SECTIONS..SECTIONS_END[.  */