This is the mail archive of the
binutils-cvs@sourceware.org
mailing list for the binutils project.
[binutils-gdb] bfdtest1 segfaults on hppa-hp-hpux10
- From: Alan Modra <amodra at sourceware dot org>
- To: bfd-cvs at sourceware dot org
- Date: 22 May 2019 09:03:59 -0000
- Subject: [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. */