From ee357486aa87b17782111295c5e7bd4ac9e6970f Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Wed, 1 Nov 2017 11:35:42 +0000 Subject: [PATCH] Fix an invalid free called when attempting to link a COFF object against an ELF archive with --no-keep-memory enabled. PR 22369 * coffgen.c (_bfd_coff_free_symbols): Fail if called on a non-COFF file. * cofflink.c (coff_link_check_archive_element): Skip non-COFF members of an archive. --- bfd/ChangeLog | 8 ++++++++ bfd/coffgen.c | 6 +++++- bfd/cofflink.c | 4 ++++ binutils/doc/binutils.texi | 12 ++++++++++-- 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index fca37c0da5d..662ef44cc60 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -7,6 +7,14 @@ Expand and move the non_got_ref comment. * elf64-ppc.c (ppc64_elf_adjust_dynamic_symbol): Likewise. +2017-11-01 Nick Clifton + + PR 22369 + * coffgen.c (_bfd_coff_free_symbols): Fail if called on a non-COFF + file. + * cofflink.c (coff_link_check_archive_element): Skip non-COFF + members of an archive. + 2017-10-31 Nick Clifton PR 22373 diff --git a/bfd/coffgen.c b/bfd/coffgen.c index d7cdf8f614e..98363d0b242 100644 --- a/bfd/coffgen.c +++ b/bfd/coffgen.c @@ -1659,7 +1659,6 @@ _bfd_coff_get_external_symbols (bfd *abfd) } obj_coff_external_syms (abfd) = syms; - return TRUE; } @@ -1747,12 +1746,16 @@ _bfd_coff_read_string_table (bfd *abfd) bfd_boolean _bfd_coff_free_symbols (bfd *abfd) { + if (! bfd_family_coff (abfd)) + return FALSE; + if (obj_coff_external_syms (abfd) != NULL && ! obj_coff_keep_syms (abfd)) { free (obj_coff_external_syms (abfd)); obj_coff_external_syms (abfd) = NULL; } + if (obj_coff_strings (abfd) != NULL && ! obj_coff_keep_strings (abfd)) { @@ -1760,6 +1763,7 @@ _bfd_coff_free_symbols (bfd *abfd) obj_coff_strings (abfd) = NULL; obj_coff_strings_len (abfd) = 0; } + return TRUE; } diff --git a/bfd/cofflink.c b/bfd/cofflink.c index 32d62bd9b87..5b18e545185 100644 --- a/bfd/cofflink.c +++ b/bfd/cofflink.c @@ -212,6 +212,10 @@ coff_link_check_archive_element (bfd *abfd, if (h->type != bfd_link_hash_undefined) return TRUE; + /* PR 22369 - Skip non COFF objects in the archive. */ + if (! bfd_family_coff (abfd)) + return TRUE; + /* Include this element? */ if (!(*info->callbacks->add_archive_element) (info, abfd, name, &abfd)) return TRUE; diff --git a/binutils/doc/binutils.texi b/binutils/doc/binutils.texi index a2a670af29d..ad924d81629 100644 --- a/binutils/doc/binutils.texi +++ b/binutils/doc/binutils.texi @@ -4661,8 +4661,13 @@ given. @itemx --all Equivalent to specifying @option{--file-header}, @option{--program-headers}, @option{--sections}, @option{--symbols}, -@option{--relocs}, @option{--dynamic}, @option{--notes} and -@option{--version-info}. +@option{--relocs}, @option{--dynamic}, @option{--notes}, +@option{--version-info}, @option{--arch-specific}, @option{--unwind}, +@option{--section-groups} and @option{--histogram}. + +Note - this option does not enable @option{--use-dynamic} itself, so +if that option is not present on the command line then dynamic symbols +and dynamic relocs will not be displayed. @item -h @itemx --file-header @@ -4758,6 +4763,9 @@ When displaying symbols, this option makes @command{readelf} use the symbol hash tables in the file's dynamic section, rather than the symbol table sections. +When displaying relocations, this option makes @command{readelf} +display the dynamic relocations rather than the static relocations. + @item -x @itemx --hex-dump= Displays the contents of the indicated section as a hexadecimal bytes. -- 2.30.2