PR 868
authorNick Clifton <nickc@redhat.com>
Wed, 21 May 2008 11:46:42 +0000 (11:46 +0000)
committerNick Clifton <nickc@redhat.com>
Wed, 21 May 2008 11:46:42 +0000 (11:46 +0000)
        * dwarf2.c (_bfd_dwarf2_cleanup_debug_info): Free memory allocated
        for filenames in function tables and variable tables.

bfd/ChangeLog
bfd/dwarf2.c

index ba07dad434905fd864af100472dac488ec61d33b..55b1560d1f73116f089803b153caa654a1050ded 100644 (file)
@@ -1,3 +1,9 @@
+2008-05-21  AndrĂ© Johansen  <andrejoh@gmail.com>
+
+       PR 868
+       * dwarf2.c (_bfd_dwarf2_cleanup_debug_info): Free memory allocated
+       for filenames in function tables and variable tables.
+
 2008-05-19  Alan Modra  <amodra@bigpond.net.au>
 
        PR 2995, PR 6473
index d0b50ff9a1796759bb4acfc4be17604a919fcf57..34e0138bf76e80ff9cf0b109255ee3eca743515b 100644 (file)
@@ -3202,6 +3202,8 @@ _bfd_dwarf2_cleanup_debug_info (bfd *abfd)
   for (each = stash->all_comp_units; each; each = each->next_unit)
     {
       struct abbrev_info **abbrevs = each->abbrevs;
+      struct funcinfo *function_table = each->function_table;
+      struct varinfo *variable_table = each->variable_table;
       size_t i;
 
       for (i = 0; i < ABBREV_HASH_SIZE; i++)
@@ -3220,6 +3222,33 @@ _bfd_dwarf2_cleanup_debug_info (bfd *abfd)
          free (each->line_table->dirs);
          free (each->line_table->files);
        }
+
+      while (function_table)
+       {
+         if (function_table->file)
+           {
+             free (function_table->file);
+             function_table->file = NULL;
+           }
+
+         if (function_table->caller_file)
+           {
+             free (function_table->caller_file);
+             function_table->caller_file = NULL;
+           }
+         function_table = function_table->prev_func;
+       }
+
+      while (variable_table)
+       {
+         if (variable_table->file)
+           {
+             free (variable_table->file);
+             variable_table->file = NULL;
+           }
+
+         variable_table = variable_table->prev_var;
+       }
     }
 
   free (stash->dwarf_abbrev_buffer);