aboutsummaryrefslogtreecommitdiff
path: root/bfd/dwarf2.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2012-08-01 01:29:12 +0000
committerAlan Modra <amodra@gmail.com>2012-08-01 01:29:12 +0000
commit1c37913d0912bf1458072dd780f5b3ec24f047cc (patch)
treebcd7c3f4a43add260f87613d53eef4aa1a4b5f02 /bfd/dwarf2.c
parentc2821c3e5548175cadc278dc860b04f9324c9baa (diff)
downloadgdb-1c37913d0912bf1458072dd780f5b3ec24f047cc.zip
gdb-1c37913d0912bf1458072dd780f5b3ec24f047cc.tar.gz
gdb-1c37913d0912bf1458072dd780f5b3ec24f047cc.tar.bz2
* 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.
Diffstat (limited to 'bfd/dwarf2.c')
-rw-r--r--bfd/dwarf2.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c
index a4dc52b..b96b6ab 100644
--- a/bfd/dwarf2.c
+++ b/bfd/dwarf2.c
@@ -173,6 +173,9 @@ struct dwarf2_debug
#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
@@ -3206,6 +3209,7 @@ _bfd_dwarf2_slurp_debug_info (bfd *abfd, bfd *debug_bfd,
if (! stash)
return FALSE;
stash->debug_sections = debug_sections;
+ stash->syms = symbols;
*pinfo = stash;
@@ -3235,7 +3239,9 @@ _bfd_dwarf2_slurp_debug_info (bfd *abfd, bfd *debug_bfd,
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
@@ -3293,9 +3299,6 @@ _bfd_dwarf2_slurp_debug_info (bfd *abfd, bfd *debug_bfd,
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;
}
@@ -3689,4 +3692,6 @@ _bfd_dwarf2_cleanup_debug_info (bfd *abfd, void **pinfo)
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);
}