]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
PR26239, memory leak in _bfd_dwarf2_slurp_debug_info
authorAlan Modra <amodra@gmail.com>
Wed, 15 Jul 2020 01:29:20 +0000 (10:59 +0930)
committerAlan Modra <amodra@gmail.com>
Wed, 15 Jul 2020 10:17:57 +0000 (19:47 +0930)
PR 26239
* coffgen.c (_bfd_coff_close_and_cleanup): Free dwarf2 info.

bfd/ChangeLog
bfd/coffgen.c

index 1337645a731ca06eec218025a6165056566f593a..6532c53233cc66a65c12dd59dc318da1709824ed 100644 (file)
@@ -1,3 +1,8 @@
+2020-07-15  Alan Modra  <amodra@gmail.com>
+
+       PR 26239
+       * coffgen.c (_bfd_coff_close_and_cleanup): Free dwarf2 info.
+
 2020-07-15  Nick Clifton  <nickc@redhat.com>
 
        PR26240
index 0a2697268e90fd2af3285db293934240afb26398..c14e9db810be7e7b0fffba40d6e7019b8e0119e4 100644 (file)
@@ -3141,16 +3141,22 @@ bfd_coff_group_name (bfd *abfd, const asection *sec)
 bfd_boolean
 _bfd_coff_close_and_cleanup (bfd *abfd)
 {
-  if (abfd->format == bfd_object
-      && bfd_family_coff (abfd)
-      && coff_data (abfd) != NULL)
+  struct coff_tdata *tdata = coff_data (abfd);
+
+  if (tdata != NULL)
     {
       /* PR 25447:
         Do not clear the keep_syms and keep_strings flags.
         These may have been set by pe_ILF_build_a_bfd() indicating
         that the syms and strings pointers are not to be freed.  */
-      if (!_bfd_coff_free_symbols (abfd))
+      if (bfd_get_format (abfd) == bfd_object
+         && bfd_family_coff (abfd)
+         && !_bfd_coff_free_symbols (abfd))
        return FALSE;
+
+      if (bfd_get_format (abfd) == bfd_object
+         || bfd_get_format (abfd) == bfd_core)
+       _bfd_dwarf2_cleanup_debug_info (abfd, &tdata->dwarf2_find_line_info);
     }
   return _bfd_generic_close_and_cleanup (abfd);
 }