* bfd-target.c (target_bfd_xclose): Only close the bfd if the
authorPedro Alves <palves@redhat.com>
Tue, 28 Jul 2009 15:05:01 +0000 (15:05 +0000)
committerPedro Alves <palves@redhat.com>
Tue, 28 Jul 2009 15:05:01 +0000 (15:05 +0000)
section tarble is not empty.
(target_bfd_reopen): If the section table ends up empty, close the
bfd here.

gdb/ChangeLog
gdb/bfd-target.c

index 48743fd..857456f 100644 (file)
@@ -1,3 +1,10 @@
+2009-07-28  Pedro Alves  <pedro@codesourcery.com>
+
+       * bfd-target.c (target_bfd_xclose): Only close the bfd if the
+       section tarble is not empty.
+       (target_bfd_reopen): If the section table ends up empty, close the
+       bfd here.
+
 2009-07-28  Aleksandar Ristovski  <aristovski@qnx.com>
 
        * nto-tdep.c (nto_thread_state_str): New array.
index ffaa4ff..2b7894e 100644 (file)
@@ -54,7 +54,10 @@ static void
 target_bfd_xclose (struct target_ops *t, int quitting)
 {
   struct target_section_table *table = t->to_data;
-  if (table->sections)
+
+  /* If the target sections table is empty, the bfd had already been
+     closed.  */
+  if (table->sections != table->sections_end)
     bfd_close (table->sections->bfd);
   xfree (table->sections);
   xfree (table);
@@ -70,6 +73,12 @@ target_bfd_reopen (struct bfd *bfd)
   table = XZALLOC (struct target_section_table);
   build_section_table (bfd, &table->sections, &table->sections_end);
 
+  /* No use keeping the bfd open if there are no target sections we
+     care about.  This way, we avoid keeping the bfd pointer stored
+     somewhere so that target_bfd_xclose could use it.  */
+  if (table->sections == table->sections_end)
+    bfd_close (bfd);
+
   t = XZALLOC (struct target_ops);
   t->to_shortname = "bfd";
   t->to_longname = _("BFD backed target");