diff options
author | Alan Modra <amodra@gmail.com> | 2020-08-14 20:19:39 +0930 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2020-08-14 21:31:22 +0930 |
commit | 82fcdb39388c6690699d41b7022b054c2de2554c (patch) | |
tree | 6b1b98eb38205802317aa297108d6a6b25533cd4 /binutils/rddbg.c | |
parent | fc0efc4bd704f09f59dd87e354c734f902017094 (diff) | |
download | gdb-82fcdb39388c6690699d41b7022b054c2de2554c.zip gdb-82fcdb39388c6690699d41b7022b054c2de2554c.tar.gz gdb-82fcdb39388c6690699d41b7022b054c2de2554c.tar.bz2 |
PR26388, objdump debug dump memory leaks
num_debug_info_entries is used not just as a count but also as a flag
(DEBUG_INFO_UNAVAILABLE) after some errors. That means
num_debug_info_entries can't be used when cleaning up malloc'd info.
PR 26388
* dwarf.c (free_debug_memory): Free alloc_num_debug_info_entries
of debug_information. Correct test of max_loc_offsets and
max_range_lists.
* rddbg.c (read_debugging_info): Free dhandle on error.
Diffstat (limited to 'binutils/rddbg.c')
-rw-r--r-- | binutils/rddbg.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/binutils/rddbg.c b/binutils/rddbg.c index 930dbf7..f8ea2f9 100644 --- a/binutils/rddbg.c +++ b/binutils/rddbg.c @@ -43,7 +43,8 @@ static void free_saved_stabs (void); pointer. */ void * -read_debugging_info (bfd *abfd, asymbol **syms, long symcount, bfd_boolean no_messages) +read_debugging_info (bfd *abfd, asymbol **syms, long symcount, + bfd_boolean no_messages) { void *dhandle; bfd_boolean found; @@ -54,13 +55,13 @@ read_debugging_info (bfd *abfd, asymbol **syms, long symcount, bfd_boolean no_me if (! read_section_stabs_debugging_info (abfd, syms, symcount, dhandle, &found)) - return NULL; + goto err_exit; if (bfd_get_flavour (abfd) == bfd_target_aout_flavour) { if (! read_symbol_stabs_debugging_info (abfd, syms, symcount, dhandle, &found)) - return NULL; + goto err_exit; } /* Try reading the COFF symbols if we didn't find any stabs in COFF @@ -70,7 +71,7 @@ read_debugging_info (bfd *abfd, asymbol **syms, long symcount, bfd_boolean no_me && symcount > 0) { if (! parse_coff (abfd, syms, symcount, dhandle)) - return NULL; + goto err_exit; found = TRUE; } @@ -79,6 +80,8 @@ read_debugging_info (bfd *abfd, asymbol **syms, long symcount, bfd_boolean no_me if (! no_messages) non_fatal (_("%s: no recognized debugging information"), bfd_get_filename (abfd)); + err_exit: + free (dhandle); return NULL; } |