aboutsummaryrefslogtreecommitdiff
path: root/binutils/dwarf.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2020-08-14 20:19:39 +0930
committerAlan Modra <amodra@gmail.com>2020-08-14 21:31:22 +0930
commit82fcdb39388c6690699d41b7022b054c2de2554c (patch)
tree6b1b98eb38205802317aa297108d6a6b25533cd4 /binutils/dwarf.c
parentfc0efc4bd704f09f59dd87e354c734f902017094 (diff)
downloadgdb-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/dwarf.c')
-rw-r--r--binutils/dwarf.c15
1 files changed, 6 insertions, 9 deletions
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;