From: Alan Modra Date: Wed, 22 May 2019 08:22:59 +0000 (+0930) Subject: bfdtest1 segfaults on hppa-hp-hpux10 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=4decd602d8570eda5d36fd6cca2e50091000fa7a;p=binutils-gdb.git 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 --git a/bfd/ChangeLog b/bfd/ChangeLog index 320e06ac7e9..af7ae755ea1 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2019-05-22 Alan Modra + + * som.c (som_bfd_free_cached_info): Call + _bfd_generic_close_and_cleanup. + 2019-05-21 Faraz Shahbazker * elfxx-mips.c (_bfd_mips_elf_check_relocs): Generate error diff --git a/bfd/som.c b/bfd/som.c index 640253ea9af..0d17b3278a4 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. */