From 82fcdb39388c6690699d41b7022b054c2de2554c Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Fri, 14 Aug 2020 20:19:39 +0930 Subject: 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. --- binutils/dwarf.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) (limited to 'binutils/dwarf.c') diff --git a/binutils/dwarf.c b/binutils/dwarf.c index d739230..5275994 100644 --- a/binutils/dwarf.c +++ b/binutils/dwarf.c @@ -10777,18 +10777,15 @@ free_debug_memory (void) if (debug_information != NULL) { - if (num_debug_info_entries != DEBUG_INFO_UNAVAILABLE) + for (i = 0; i < alloc_num_debug_info_entries; i++) { - for (i = 0; i < num_debug_info_entries; i++) + if (debug_information [i].max_loc_offsets) { - if (!debug_information [i].max_loc_offsets) - { - free (debug_information [i].loc_offsets); - free (debug_information [i].have_frame_base); - } - if (!debug_information [i].max_range_lists) - free (debug_information [i].range_lists); + free (debug_information [i].loc_offsets); + free (debug_information [i].have_frame_base); } + if (debug_information [i].max_range_lists) + free (debug_information [i].range_lists); } free (debug_information); debug_information = NULL; -- cgit v1.1