This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] bfdtest1 segfaults on hppa-hp-hpux10


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=4decd602d8570eda5d36fd6cca2e50091000fa7a

commit 4decd602d8570eda5d36fd6cca2e50091000fa7a
Author: Alan Modra <amodra@gmail.com>
Date:   Wed May 22 17:52:59 2019 +0930

    bfdtest1 segfaults on hppa-hp-hpux10
    
    The archive element cache needs tidying when closing an archive element.
    This patch fixes these failures:
    -FAIL: ar long file names (bfdtest1)
    -FAIL: ar thin archive (bfdtest1)
    -FAIL: ar thin archive with nested archive (bfdtest1)
    
    	* som.c (som_bfd_free_cached_info): Call
    	_bfd_generic_close_and_cleanup.

Diff:
---
 bfd/ChangeLog |  5 +++++
 bfd/som.c     | 30 +++++++++++++++---------------
 2 files changed, 20 insertions(+), 15 deletions(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 320e06a..af7ae75 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2019-05-22  Alan Modra  <amodra@gmail.com>
+
+	* som.c (som_bfd_free_cached_info): Call
+	_bfd_generic_close_and_cleanup.
+
 2019-05-21  Faraz Shahbazker  <fshahbazker@wavecomp.com>
 
 	* elfxx-mips.c (_bfd_mips_elf_check_relocs): Generate error
diff --git a/bfd/som.c b/bfd/som.c
index 640253e..0d17b32 100644
--- a/bfd/som.c
+++ b/bfd/som.c
@@ -6695,25 +6695,25 @@ som_write_armap (bfd *abfd,
 static bfd_boolean
 som_bfd_free_cached_info (bfd *abfd)
 {
-  asection *o;
-
-  if (bfd_get_format (abfd) != bfd_object)
-    return TRUE;
+  if (bfd_get_format (abfd) == bfd_object)
+    {
+      asection *o;
 
 #define FREE(x) if (x != NULL) { free (x); x = NULL; }
-  /* Free the native string and symbol tables.  */
-  FREE (obj_som_symtab (abfd));
-  FREE (obj_som_stringtab (abfd));
-  for (o = abfd->sections; o != NULL; o = o->next)
-    {
-      /* Free the native relocations.  */
-      o->reloc_count = (unsigned) -1;
-      FREE (som_section_data (o)->reloc_stream);
-      /* Do not free the generic relocations as they are objalloc'ed.  */
-    }
+      /* Free the native string and symbol tables.  */
+      FREE (obj_som_symtab (abfd));
+      FREE (obj_som_stringtab (abfd));
+      for (o = abfd->sections; o != NULL; o = o->next)
+	{
+	  /* Free the native relocations.  */
+	  o->reloc_count = (unsigned) -1;
+	  FREE (som_section_data (o)->reloc_stream);
+	  /* Do not free the generic relocations as they are objalloc'ed.  */
+	}
 #undef FREE
+    }
 
-  return TRUE;
+  return _bfd_generic_close_and_cleanup (abfd);
 }
 
 /* End of miscellaneous support functions.  */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]