+2012-08-01  Alan Modra  <amodra@gmail.com>
+
+       * dwarf2.c (struct dwarf2_debug): Add close_on_cleanup.
+       (_bfd_dwarf2_slurp_debug_info): Set close_on_cleanup if we open
+       gnu_debuglink bfd.
+       (_bfd_dwarf2_cleanup_debug_info): Act on close_on_cleanup.
+
 2012-07-30  Nick Clifton  <nickc@redhat.com>
 
        * po/bfd.pot: Updated template.
 
 #define STASH_INFO_HASH_OFF        0
 #define STASH_INFO_HASH_ON         1
 #define STASH_INFO_HASH_DISABLED   2
+
+  /* True if we opened bfd_ptr.  */
+  bfd_boolean close_on_cleanup;
 };
 
 struct arange
   if (! stash)
     return FALSE;
   stash->debug_sections = debug_sections;
+  stash->syms = symbols;
 
   *pinfo = stash;
 
          free (debug_filename);
          return FALSE;
        }
+      stash->close_on_cleanup = TRUE;
     }
+  stash->bfd_ptr = debug_bfd;
 
   /* There can be more than one DWARF2 info section in a BFD these
      days.  First handle the easy case when there's only one.  If
   stash->info_ptr_end = stash->info_ptr + total_size;
   stash->sec = find_debug_info (debug_bfd, debug_sections, NULL);
   stash->sec_info_ptr = stash->info_ptr;
-  stash->syms = symbols;
-  stash->bfd_ptr = debug_bfd;
-
   return TRUE;
 }
 
     free (stash->dwarf_ranges_buffer);
   if (stash->info_ptr_memory)
     free (stash->info_ptr_memory);
+  if (stash->close_on_cleanup)
+    bfd_close (stash->bfd_ptr);
 }