diff options
author | Alan Modra <amodra@bigpond.net.au> | 2012-08-01 01:29:12 +0000 |
---|---|---|
committer | Alan Modra <amodra@bigpond.net.au> | 2012-08-01 01:29:12 +0000 |
commit | f7f0a9f5d34cce21b54631e44c83e55aa690497f (patch) | |
tree | 1d71cd3dd79baa95342928610c201d0dfb854679 /bfd | |
parent | 05b2da25d4fe7d21000c8a969a58f54dfbf44341 (diff) | |
download | binutils-redhat-f7f0a9f5d34cce21b54631e44c83e55aa690497f.tar.gz |
* 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')
-rw-r--r-- | bfd/ChangeLog | 7 | ||||
-rw-r--r-- | bfd/dwarf2.c | 11 |
2 files changed, 15 insertions, 3 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 7c5f14f463..73f9eff8c5 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +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. diff --git a/bfd/dwarf2.c b/bfd/dwarf2.c index a4dc52b278..b96b6abffd 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); } |