[tbb-commits] [tor-browser-build/master] Bug 26148: Update binutils to 2.31.1
gk at torproject.org
gk at torproject.org
Thu Jan 17 07:18:09 UTC 2019
commit 5631b327ab3654af5f2b329cf46fd67921004f41
Author: Nicolas Vigier <boklm at torproject.org>
Date: Thu Jan 10 21:59:07 2019 +0100
Bug 26148: Update binutils to 2.31.1
With older versions of binutils, the order in which .o files were
included in an .a archive did not affect the output when linking a
program or library, which is no longer the case with recent versions of
binutils. To avoid reproducibility issues we patch the libtool version
included in gcc to make the creation `libstdc++.a` reproducible.
---
keyring/binutils.gpg | Bin 1169 -> 3184 bytes
projects/binutils/build | 12 +-
projects/binutils/config | 11 +-
.../binutils/fix-windows-reproducibility.patch | 1034 --------------------
projects/binutils/peXXigen.patch | 29 -
projects/mingw-w64/build | 4 +
projects/mingw-w64/config | 1 +
projects/mingw-w64/libtool-sort.patch | 67 ++
8 files changed, 77 insertions(+), 1081 deletions(-)
diff --git a/keyring/binutils.gpg b/keyring/binutils.gpg
index 2de205d..d13540e 100644
Binary files a/keyring/binutils.gpg and b/keyring/binutils.gpg differ
diff --git a/projects/binutils/build b/projects/binutils/build
index 0d1c062..ee22a1c 100644
--- a/projects/binutils/build
+++ b/projects/binutils/build
@@ -16,18 +16,12 @@ distdir=/var/tmp/dist/binutils
ln -s /usr/lib/gcc/x86_64-linux-gnu/4.7/libstdc++_pic.a libstdc++.a
export LDFLAGS="-L$rootdir -lstdc++"
[% END %]
-tar xf [% project %]-[% c("version") %].tar.bz2
+tar xf [% project %]-[% c("version") %].tar.xz
cd [% project %]-[% c("version") %]
[% IF c('var/windows') -%]
- # XXX: This is needed due to bug 10102.
- sed 's/= extern_rt_rel_d;/= extern_rt_rel_d;\n memset (extern_rt_rel_d, 0, PE_IDATA5_SIZE);/' -i ld/pe-dll.c
- # Zeroing timestamps in PE headers reliably, see bug 12753.
- patch -p1 < ../peXXigen.patch
- # Needed for the hardening...
+ # Needed for the hardening... The upstream ticket is:
+ # https://sourceware.org/bugzilla/show_bug.cgi?id=17321
patch -p1 < ../enable-reloc-section-ld.patch
- # fix build reproducibility of Windows builds by reverting commit 13e570f80c.
- # See bug 16472.
- patch -p1 < ../fix-windows-reproducibility.patch
[% END -%]
[% IF c('var/windows-x86_64') -%]
patch -p1 < ../64bit-fixups.patch
diff --git a/projects/binutils/config b/projects/binutils/config
index 1f992a2..2367280 100644
--- a/projects/binutils/config
+++ b/projects/binutils/config
@@ -1,5 +1,5 @@
# vim: filetype=yaml sw=2
-version: 2.26.1
+version: 2.31.1
filename: '[% project %]-[% c("version") %]-[% c("var/build_id") %].tar.gz'
var:
configure_opt: '--disable-multilib --enable-gold --enable-deterministic-archives --enable-plugins'
@@ -10,12 +10,9 @@ targets:
windows:
var:
configure_opt: '--target=[% c("arch") %]-w64-mingw32 --disable-multilib --enable-deterministic-archives'
- arch_deps:
- # texinfo required for fix-windows-reproducibility.patch
- - texinfo
input_files:
- - URL: https://ftp.gnu.org/gnu/binutils/binutils-[% c("version") %].tar.bz2
+ - URL: https://ftp.gnu.org/gnu/binutils/binutils-[% c("version") %].tar.xz
sig_ext: sig
file_gpg_id: 1
gpg_keyring: binutils.gpg
@@ -24,7 +21,3 @@ input_files:
enable: '[% c("var/windows") %]'
- filename: 64bit-fixups.patch
enable: '[% c("var/windows-x86_64") %]'
- - filename: peXXigen.patch
- enable: '[% c("var/windows") %]'
- - filename: fix-windows-reproducibility.patch
- enable: '[% c("var/windows") %]'
diff --git a/projects/binutils/fix-windows-reproducibility.patch b/projects/binutils/fix-windows-reproducibility.patch
deleted file mode 100644
index 1fc5987..0000000
--- a/projects/binutils/fix-windows-reproducibility.patch
+++ /dev/null
@@ -1,1034 +0,0 @@
-From c6df45304e92aa2d7e9f2d8311ae5a0b1543daa8 Mon Sep 17 00:00:00 2001
-From: Nicolas Vigier <boklm at torproject.org>
-Date: Wed, 16 May 2018 11:07:52 +0200
-Subject: [PATCH] Revert "Fix LTO vs. COFF archives"
-
-This reverts commit 13e570f80cbfb299a8858ce6830e91a6cb40ab7b.
----
- bfd/aoutx.h | 2 -
- bfd/cofflink.c | 116 +++++++++++++++---
- bfd/ecoff.c | 164 +++++++++++++++++++++++--
- bfd/elflink.c | 53 ++++++--
- bfd/libbfd-in.h | 4 +-
- bfd/libbfd.h | 4 +-
- bfd/linker.c | 366 ++++++++++++++++++++++++++++++++++++++++----------------
- bfd/pdp11.c | 4 +-
- bfd/xcofflink.c | 4 +-
- 9 files changed, 560 insertions(+), 157 deletions(-)
-
-diff --git a/bfd/aoutx.h b/bfd/aoutx.h
-index 9385a98..6ca9c58 100644
---- a/bfd/aoutx.h
-+++ b/bfd/aoutx.h
-@@ -3405,8 +3405,6 @@ aout_link_check_ar_symbols (bfd *abfd,
- static bfd_boolean
- aout_link_check_archive_element (bfd *abfd,
- struct bfd_link_info *info,
-- struct bfd_link_hash_entry *h ATTRIBUTE_UNUSED,
-- const char *name ATTRIBUTE_UNUSED,
- bfd_boolean *pneeded)
- {
- bfd *oldbfd;
-diff --git a/bfd/cofflink.c b/bfd/cofflink.c
-index 2782795..3a82640 100644
---- a/bfd/cofflink.c
-+++ b/bfd/cofflink.c
-@@ -29,11 +29,9 @@
- #include "libcoff.h"
- #include "safe-ctype.h"
-
--static bfd_boolean coff_link_add_object_symbols (bfd *, struct bfd_link_info *);
--static bfd_boolean coff_link_check_archive_element
-- (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, const char *,
-- bfd_boolean *);
--static bfd_boolean coff_link_add_symbols (bfd *, struct bfd_link_info *);
-+static bfd_boolean coff_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info);
-+static bfd_boolean coff_link_check_archive_element (bfd *abfd, struct bfd_link_info *info, bfd_boolean *pneeded);
-+static bfd_boolean coff_link_add_symbols (bfd *abfd, struct bfd_link_info *info);
-
- /* Return TRUE if SYM is a weak, external symbol. */
- #define IS_WEAK_EXTERNAL(abfd, sym) \
-@@ -192,6 +190,74 @@ coff_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
- return TRUE;
- }
-
-+/* Look through the symbols to see if this object file should be
-+ included in the link. */
-+
-+static bfd_boolean
-+coff_link_check_ar_symbols (bfd *abfd,
-+ struct bfd_link_info *info,
-+ bfd_boolean *pneeded,
-+ bfd **subsbfd)
-+{
-+ bfd_size_type symesz;
-+ bfd_byte *esym;
-+ bfd_byte *esym_end;
-+
-+ *pneeded = FALSE;
-+
-+ symesz = bfd_coff_symesz (abfd);
-+ esym = (bfd_byte *) obj_coff_external_syms (abfd);
-+ esym_end = esym + obj_raw_syment_count (abfd) * symesz;
-+ while (esym < esym_end)
-+ {
-+ struct internal_syment sym;
-+ enum coff_symbol_classification classification;
-+
-+ bfd_coff_swap_sym_in (abfd, esym, &sym);
-+
-+ classification = bfd_coff_classify_symbol (abfd, &sym);
-+ if (classification == COFF_SYMBOL_GLOBAL
-+ || classification == COFF_SYMBOL_COMMON)
-+ {
-+ const char *name;
-+ char buf[SYMNMLEN + 1];
-+ struct bfd_link_hash_entry *h;
-+
-+ /* This symbol is externally visible, and is defined by this
-+ object file. */
-+ name = _bfd_coff_internal_syment_name (abfd, &sym, buf);
-+ if (name == NULL)
-+ return FALSE;
-+ h = bfd_link_hash_lookup (info->hash, name, FALSE, FALSE, TRUE);
-+
-+ /* Auto import. */
-+ if (!h
-+ && info->pei386_auto_import
-+ && CONST_STRNEQ (name, "__imp_"))
-+ h = bfd_link_hash_lookup (info->hash, name + 6, FALSE, FALSE, TRUE);
-+
-+ /* We are only interested in symbols that are currently
-+ undefined. If a symbol is currently known to be common,
-+ COFF linkers do not bring in an object file which defines
-+ it. */
-+ if (h != (struct bfd_link_hash_entry *) NULL
-+ && h->type == bfd_link_hash_undefined)
-+ {
-+ if (!(*info->callbacks
-+ ->add_archive_element) (info, abfd, name, subsbfd))
-+ return FALSE;
-+ *pneeded = TRUE;
-+ return TRUE;
-+ }
-+ }
-+
-+ esym += (sym.n_numaux + 1) * symesz;
-+ }
-+
-+ /* We do not need this object file. */
-+ return TRUE;
-+}
-+
- /* Check a single archive element to see if we need to include it in
- the link. *PNEEDED is set according to whether this element is
- needed in the link or not. This is called via
-@@ -200,23 +266,41 @@ coff_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
- static bfd_boolean
- coff_link_check_archive_element (bfd *abfd,
- struct bfd_link_info *info,
-- struct bfd_link_hash_entry *h,
-- const char *name,
- bfd_boolean *pneeded)
- {
-- *pneeded = FALSE;
-+ bfd *oldbfd;
-+ bfd_boolean needed;
-
-- /* We are only interested in symbols that are currently undefined.
-- If a symbol is currently known to be common, COFF linkers do not
-- bring in an object file which defines it. */
-- if (h->type != bfd_link_hash_undefined)
-- return TRUE;
-+ if (!_bfd_coff_get_external_symbols (abfd))
-+ return FALSE;
-
-- if (!(*info->callbacks->add_archive_element) (info, abfd, name, &abfd))
-+ oldbfd = abfd;
-+ if (!coff_link_check_ar_symbols (abfd, info, pneeded, &abfd))
- return FALSE;
-- *pneeded = TRUE;
-
-- return coff_link_add_object_symbols (abfd, info);
-+ needed = *pneeded;
-+ if (needed)
-+ {
-+ /* Potentially, the add_archive_element hook may have set a
-+ substitute BFD for us. */
-+ if (abfd != oldbfd)
-+ {
-+ if (!info->keep_memory
-+ && !_bfd_coff_free_symbols (oldbfd))
-+ return FALSE;
-+ if (!_bfd_coff_get_external_symbols (abfd))
-+ return FALSE;
-+ }
-+ if (!coff_link_add_symbols (abfd, info))
-+ return FALSE;
-+ }
-+
-+ if (!info->keep_memory || !needed)
-+ {
-+ if (!_bfd_coff_free_symbols (abfd))
-+ return FALSE;
-+ }
-+ return TRUE;
- }
-
- /* Add all the symbols from an object file to the hash table. */
-diff --git a/bfd/ecoff.c b/bfd/ecoff.c
-index 01f51e6..2c915f0 100644
---- a/bfd/ecoff.c
-+++ b/bfd/ecoff.c
-@@ -3500,29 +3500,171 @@ ecoff_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
- return FALSE;
- }
-
-+/* Factored out from ecoff_link_check_archive_element. */
-+
-+static bfd_boolean
-+read_ext_syms_and_strs (HDRR **symhdr, bfd_size_type *external_ext_size,
-+ bfd_size_type *esize, void **external_ext, char **ssext, bfd *abfd,
-+ const struct ecoff_backend_data * const backend)
-+{
-+ if (! ecoff_slurp_symbolic_header (abfd))
-+ return FALSE;
-+
-+ /* If there are no symbols, we don't want it. */
-+ if (bfd_get_symcount (abfd) == 0)
-+ return TRUE;
-+
-+ *symhdr = &ecoff_data (abfd)->debug_info.symbolic_header;
-+
-+ *external_ext_size = backend->debug_swap.external_ext_size;
-+ *esize = (*symhdr)->iextMax * *external_ext_size;
-+ *external_ext = bfd_malloc (*esize);
-+ if (*external_ext == NULL && *esize != 0)
-+ return FALSE;
-+
-+ if (bfd_seek (abfd, (file_ptr) (*symhdr)->cbExtOffset, SEEK_SET) != 0
-+ || bfd_bread (*external_ext, *esize, abfd) != *esize)
-+ return FALSE;
-+
-+ *ssext = (char *) bfd_malloc ((bfd_size_type) (*symhdr)->issExtMax);
-+ if (*ssext == NULL && (*symhdr)->issExtMax != 0)
-+ return FALSE;
-+
-+ if (bfd_seek (abfd, (file_ptr) (*symhdr)->cbSsExtOffset, SEEK_SET) != 0
-+ || (bfd_bread (*ssext, (bfd_size_type) (*symhdr)->issExtMax, abfd)
-+ != (bfd_size_type) (*symhdr)->issExtMax))
-+ return FALSE;
-+ return TRUE;
-+}
-+
-+static bfd_boolean
-+reread_ext_syms_and_strs (HDRR **symhdr, bfd_size_type *external_ext_size,
-+ bfd_size_type *esize, void **external_ext, char **ssext, bfd *abfd,
-+ const struct ecoff_backend_data * const backend)
-+{
-+ if (*external_ext != NULL)
-+ free (*external_ext);
-+ *external_ext = NULL;
-+ if (*ssext != NULL)
-+ free (*ssext);
-+ *ssext = NULL;
-+ return read_ext_syms_and_strs (symhdr, external_ext_size, esize,
-+ external_ext, ssext, abfd, backend);
-+}
-+
- /* This is called if we used _bfd_generic_link_add_archive_symbols
- because we were not dealing with an ECOFF archive. */
-
- static bfd_boolean
- ecoff_link_check_archive_element (bfd *abfd,
- struct bfd_link_info *info,
-- struct bfd_link_hash_entry *h,
-- const char *name,
- bfd_boolean *pneeded)
- {
-+ const struct ecoff_backend_data * const backend = ecoff_backend (abfd);
-+ void (* const swap_ext_in) (bfd *, void *, EXTR *)
-+ = backend->debug_swap.swap_ext_in;
-+ HDRR *symhdr;
-+ bfd_size_type external_ext_size = 0;
-+ void * external_ext = NULL;
-+ bfd_size_type esize = 0;
-+ char *ssext = NULL;
-+ char *ext_ptr;
-+ char *ext_end;
-+
- *pneeded = FALSE;
-
-- /* Unlike the generic linker, we do not pull in elements because
-- of common symbols. */
-- if (h->type != bfd_link_hash_undefined)
-- return TRUE;
-+ /* Read in the external symbols and external strings. */
-+ if (!read_ext_syms_and_strs (&symhdr, &external_ext_size, &esize,
-+ &external_ext, &ssext, abfd, backend))
-+ goto error_return;
-
-- /* Include this element. */
-- if (!(*info->callbacks->add_archive_element) (info, abfd, name, &abfd))
-- return FALSE;
-- *pneeded = TRUE;
-+ /* If there are no symbols, we don't want it. */
-+ if (bfd_get_symcount (abfd) == 0)
-+ goto successful_return;
-
-- return ecoff_link_add_object_symbols (abfd, info);
-+ /* Look through the external symbols to see if they define some
-+ symbol that is currently undefined. */
-+ ext_ptr = (char *) external_ext;
-+ ext_end = ext_ptr + esize;
-+ for (; ext_ptr < ext_end; ext_ptr += external_ext_size)
-+ {
-+ EXTR esym;
-+ bfd_boolean def;
-+ const char *name;
-+ bfd *oldbfd;
-+ struct bfd_link_hash_entry *h;
-+
-+ (*swap_ext_in) (abfd, (void *) ext_ptr, &esym);
-+
-+ /* See if this symbol defines something. */
-+ if (esym.asym.st != stGlobal
-+ && esym.asym.st != stLabel
-+ && esym.asym.st != stProc)
-+ continue;
-+
-+ switch (esym.asym.sc)
-+ {
-+ case scText:
-+ case scData:
-+ case scBss:
-+ case scAbs:
-+ case scSData:
-+ case scSBss:
-+ case scRData:
-+ case scCommon:
-+ case scSCommon:
-+ case scInit:
-+ case scFini:
-+ case scRConst:
-+ def = TRUE;
-+ break;
-+ default:
-+ def = FALSE;
-+ break;
-+ }
-+
-+ if (! def)
-+ continue;
-+
-+ name = ssext + esym.asym.iss;
-+ h = bfd_link_hash_lookup (info->hash, name, FALSE, FALSE, TRUE);
-+
-+ /* Unlike the generic linker, we do not pull in elements because
-+ of common symbols. */
-+ if (h == NULL
-+ || h->type != bfd_link_hash_undefined)
-+ continue;
-+
-+ /* Include this element. */
-+ oldbfd = abfd;
-+ if (!(*info->callbacks
-+ ->add_archive_element) (info, abfd, name, &abfd))
-+ goto error_return;
-+ /* Potentially, the add_archive_element hook may have set a
-+ substitute BFD for us. */
-+ if (abfd != oldbfd
-+ && !reread_ext_syms_and_strs (&symhdr, &external_ext_size, &esize,
-+ &external_ext, &ssext, abfd, backend))
-+ goto error_return;
-+ if (! ecoff_link_add_externals (abfd, info, external_ext, ssext))
-+ goto error_return;
-+
-+ *pneeded = TRUE;
-+ goto successful_return;
-+ }
-+
-+ successful_return:
-+ if (external_ext != NULL)
-+ free (external_ext);
-+ if (ssext != NULL)
-+ free (ssext);
-+ return TRUE;
-+ error_return:
-+ if (external_ext != NULL)
-+ free (external_ext);
-+ if (ssext != NULL)
-+ free (ssext);
-+ return FALSE;
- }
-
- /* Add the symbols from an archive file to the global hash table.
-diff --git a/bfd/elflink.c b/bfd/elflink.c
-index 94ab762..164df6b 100644
---- a/bfd/elflink.c
-+++ b/bfd/elflink.c
-@@ -2933,6 +2933,13 @@ elf_link_is_defined_archive_symbol (bfd * abfd, carsym * symdef)
- if (! bfd_check_format (abfd, bfd_object))
- return FALSE;
-
-+ /* If we have already included the element containing this symbol in the
-+ link then we do not need to include it again. Just claim that any symbol
-+ it contains is not a definition, so that our caller will not decide to
-+ (re)include this element. */
-+ if (abfd->archive_pass)
-+ return FALSE;
-+
- /* Select the appropriate symbol table. */
- if ((abfd->flags & DYNAMIC) == 0 || elf_dynsymtab (abfd) == 0)
- hdr = &elf_tdata (abfd)->symtab_hdr;
-@@ -4929,8 +4936,20 @@ _bfd_elf_archive_symbol_lookup (bfd *abfd,
- }
-
- /* Add symbols from an ELF archive file to the linker hash table. We
-- don't use _bfd_generic_link_add_archive_symbols because we need to
-- handle versioned symbols.
-+ don't use _bfd_generic_link_add_archive_symbols because of a
-+ problem which arises on UnixWare. The UnixWare libc.so is an
-+ archive which includes an entry libc.so.1 which defines a bunch of
-+ symbols. The libc.so archive also includes a number of other
-+ object files, which also define symbols, some of which are the same
-+ as those defined in libc.so.1. Correct linking requires that we
-+ consider each object file in turn, and include it if it defines any
-+ symbols we need. _bfd_generic_link_add_archive_symbols does not do
-+ this; it looks through the list of undefined symbols, and includes
-+ any object file which defines them. When this algorithm is used on
-+ UnixWare, it winds up pulling in libc.so.1 early and defining a
-+ bunch of symbols. This means that some of the other objects in the
-+ archive are not included in the link, which is incorrect since they
-+ precede libc.so.1 in the archive.
-
- Fortunately, ELF archive handling is simpler than that done by
- _bfd_generic_link_add_archive_symbols, which has to allow for a.out
-@@ -4945,7 +4964,8 @@ static bfd_boolean
- elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
- {
- symindex c;
-- unsigned char *included = NULL;
-+ bfd_boolean *defined = NULL;
-+ bfd_boolean *included = NULL;
- carsym *symdefs;
- bfd_boolean loop;
- bfd_size_type amt;
-@@ -4969,10 +4989,11 @@ elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
- if (c == 0)
- return TRUE;
- amt = c;
-- amt *= sizeof (*included);
-- included = (unsigned char *) bfd_zmalloc (amt);
-- if (included == NULL)
-- return FALSE;
-+ amt *= sizeof (bfd_boolean);
-+ defined = (bfd_boolean *) bfd_zmalloc (amt);
-+ included = (bfd_boolean *) bfd_zmalloc (amt);
-+ if (defined == NULL || included == NULL)
-+ goto error_return;
-
- symdefs = bfd_ardata (abfd)->symdefs;
- bed = get_elf_backend_data (abfd);
-@@ -4997,7 +5018,7 @@ elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
- struct bfd_link_hash_entry *undefs_tail;
- symindex mark;
-
-- if (included[i])
-+ if (defined[i] || included[i])
- continue;
- if (symdef->file_offset == last)
- {
-@@ -5032,8 +5053,7 @@ elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
- else if (h->root.type != bfd_link_hash_undefined)
- {
- if (h->root.type != bfd_link_hash_undefweak)
-- /* Symbol must be defined. Don't check it again. */
-- included[i] = TRUE;
-+ defined[i] = TRUE;
- continue;
- }
-
-@@ -5045,6 +5065,16 @@ elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
- if (! bfd_check_format (element, bfd_object))
- goto error_return;
-
-+ /* Doublecheck that we have not included this object
-+ already--it should be impossible, but there may be
-+ something wrong with the archive. */
-+ if (element->archive_pass != 0)
-+ {
-+ bfd_set_error (bfd_error_bad_value);
-+ goto error_return;
-+ }
-+ element->archive_pass = 1;
-+
- undefs_tail = info->hash->undefs_tail;
-
- if (!(*info->callbacks
-@@ -5082,11 +5112,14 @@ elf_link_add_archive_symbols (bfd *abfd, struct bfd_link_info *info)
- }
- while (loop);
-
-+ free (defined);
- free (included);
-
- return TRUE;
-
- error_return:
-+ if (defined != NULL)
-+ free (defined);
- if (included != NULL)
- free (included);
- return FALSE;
-diff --git a/bfd/libbfd-in.h b/bfd/libbfd-in.h
-index 50a46ac..90c6018 100644
---- a/bfd/libbfd-in.h
-+++ b/bfd/libbfd-in.h
-@@ -596,9 +596,7 @@ extern bfd_boolean _bfd_generic_link_add_symbols_collect
- /* Generic archive add symbol routine. */
- extern bfd_boolean _bfd_generic_link_add_archive_symbols
- (bfd *, struct bfd_link_info *,
-- bfd_boolean (*) (bfd *, struct bfd_link_info *,
-- struct bfd_link_hash_entry *, const char *,
-- bfd_boolean *));
-+ bfd_boolean (*) (bfd *, struct bfd_link_info *, bfd_boolean *));
-
- /* Forward declaration to avoid prototype errors. */
- typedef struct bfd_link_hash_entry _bfd_link_hash_entry;
-diff --git a/bfd/libbfd.h b/bfd/libbfd.h
-index 6c48f82..ffb6ea4 100644
---- a/bfd/libbfd.h
-+++ b/bfd/libbfd.h
-@@ -601,9 +601,7 @@ extern bfd_boolean _bfd_generic_link_add_symbols_collect
- /* Generic archive add symbol routine. */
- extern bfd_boolean _bfd_generic_link_add_archive_symbols
- (bfd *, struct bfd_link_info *,
-- bfd_boolean (*) (bfd *, struct bfd_link_info *,
-- struct bfd_link_hash_entry *, const char *,
-- bfd_boolean *));
-+ bfd_boolean (*) (bfd *, struct bfd_link_info *, bfd_boolean *));
-
- /* Forward declaration to avoid prototype errors. */
- typedef struct bfd_link_hash_entry _bfd_link_hash_entry;
-diff --git a/bfd/linker.c b/bfd/linker.c
-index abdf5b0..4cff1e7 100644
---- a/bfd/linker.c
-+++ b/bfd/linker.c
-@@ -229,16 +229,28 @@ SUBSUBSECTION
- @findex _bfd_generic_link_add_archive_symbols
- In most cases the work of looking through the symbols in the
- archive should be done by the
-- <<_bfd_generic_link_add_archive_symbols>> function.
-+ <<_bfd_generic_link_add_archive_symbols>> function. This
-+ function builds a hash table from the archive symbol table and
-+ looks through the list of undefined symbols to see which
-+ elements should be included.
- <<_bfd_generic_link_add_archive_symbols>> is passed a function
- to call to make the final decision about adding an archive
- element to the link and to do the actual work of adding the
-- symbols to the linker hash table. If the element is to
-+ symbols to the linker hash table.
-+
-+ The function passed to
-+ <<_bfd_generic_link_add_archive_symbols>> must read the
-+ symbols of the archive element and decide whether the archive
-+ element should be included in the link. If the element is to
- be included, the <<add_archive_element>> linker callback
- routine must be called with the element as an argument, and
- the element's symbols must be added to the linker hash table
- just as though the element had itself been passed to the
-- <<_bfd_link_add_symbols>> function.
-+ <<_bfd_link_add_symbols>> function. The <<add_archive_element>>
-+ callback has the option to indicate that it would like to
-+ replace the element archive with a substitute BFD, in which
-+ case it is the symbols of that substitute BFD that must be
-+ added to the linker hash table instead.
-
- When the a.out <<_bfd_link_add_symbols>> function receives an
- archive, it calls <<_bfd_generic_link_add_archive_symbols>>
-@@ -407,14 +419,11 @@ static bfd_boolean generic_link_add_object_symbols
- static bfd_boolean generic_link_add_symbols
- (bfd *, struct bfd_link_info *, bfd_boolean);
- static bfd_boolean generic_link_check_archive_element_no_collect
-- (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, const char *,
-- bfd_boolean *);
-+ (bfd *, struct bfd_link_info *, bfd_boolean *);
- static bfd_boolean generic_link_check_archive_element_collect
-- (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, const char *,
-- bfd_boolean *);
-+ (bfd *, struct bfd_link_info *, bfd_boolean *);
- static bfd_boolean generic_link_check_archive_element
-- (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, const char *,
-- bfd_boolean *, bfd_boolean);
-+ (bfd *, struct bfd_link_info *, bfd_boolean *, bfd_boolean);
- static bfd_boolean generic_link_add_symbol_list
- (bfd *, struct bfd_link_info *, bfd_size_type count, asymbol **,
- bfd_boolean);
-@@ -908,32 +917,138 @@ generic_link_add_object_symbols (bfd *abfd,
- return generic_link_add_symbol_list (abfd, info, symcount, outsyms, collect);
- }
-
-+/* We build a hash table of all symbols defined in an archive. */
-+
-+/* An archive symbol may be defined by multiple archive elements.
-+ This linked list is used to hold the elements. */
-+
-+struct archive_list
-+{
-+ struct archive_list *next;
-+ unsigned int indx;
-+};
-+
-+/* An entry in an archive hash table. */
-+
-+struct archive_hash_entry
-+{
-+ struct bfd_hash_entry root;
-+ /* Where the symbol is defined. */
-+ struct archive_list *defs;
-+};
-+
-+/* An archive hash table itself. */
-+
-+struct archive_hash_table
-+{
-+ struct bfd_hash_table table;
-+};
-+
-+/* Create a new entry for an archive hash table. */
-+
-+static struct bfd_hash_entry *
-+archive_hash_newfunc (struct bfd_hash_entry *entry,
-+ struct bfd_hash_table *table,
-+ const char *string)
-+{
-+ struct archive_hash_entry *ret = (struct archive_hash_entry *) entry;
-+
-+ /* Allocate the structure if it has not already been allocated by a
-+ subclass. */
-+ if (ret == NULL)
-+ ret = (struct archive_hash_entry *)
-+ bfd_hash_allocate (table, sizeof (struct archive_hash_entry));
-+ if (ret == NULL)
-+ return NULL;
-+
-+ /* Call the allocation method of the superclass. */
-+ ret = ((struct archive_hash_entry *)
-+ bfd_hash_newfunc ((struct bfd_hash_entry *) ret, table, string));
-+
-+ if (ret)
-+ {
-+ /* Initialize the local fields. */
-+ ret->defs = NULL;
-+ }
-+
-+ return &ret->root;
-+}
-+
-+/* Initialize an archive hash table. */
-+
-+static bfd_boolean
-+archive_hash_table_init
-+ (struct archive_hash_table *table,
-+ struct bfd_hash_entry *(*newfunc) (struct bfd_hash_entry *,
-+ struct bfd_hash_table *,
-+ const char *),
-+ unsigned int entsize)
-+{
-+ return bfd_hash_table_init (&table->table, newfunc, entsize);
-+}
-+
-+/* Look up an entry in an archive hash table. */
-+
-+#define archive_hash_lookup(t, string, create, copy) \
-+ ((struct archive_hash_entry *) \
-+ bfd_hash_lookup (&(t)->table, (string), (create), (copy)))
-+
-+/* Allocate space in an archive hash table. */
-+
-+#define archive_hash_allocate(t, size) bfd_hash_allocate (&(t)->table, (size))
-+
-+/* Free an archive hash table. */
-+
-+#define archive_hash_table_free(t) bfd_hash_table_free (&(t)->table)
-+
- /* Generic function to add symbols from an archive file to the global
- hash file. This function presumes that the archive symbol table
- has already been read in (this is normally done by the
-- bfd_check_format entry point). It looks through the archive symbol
-- table for symbols that are undefined or common in the linker global
-- symbol hash table. When one is found, the CHECKFN argument is used
-- to see if an object file should be included. This allows targets
-- to customize common symbol behaviour. CHECKFN should set *PNEEDED
-- to TRUE if the object file should be included, and must also call
-- the bfd_link_info add_archive_element callback function and handle
-- adding the symbols to the global hash table. CHECKFN must notice
-- if the callback indicates a substitute BFD, and arrange to add
-- those symbols instead if it does so. CHECKFN should only return
-- FALSE if some sort of error occurs. */
-+ bfd_check_format entry point). It looks through the undefined and
-+ common symbols and searches the archive symbol table for them. If
-+ it finds an entry, it includes the associated object file in the
-+ link.
-+
-+ The old linker looked through the archive symbol table for
-+ undefined symbols. We do it the other way around, looking through
-+ undefined symbols for symbols defined in the archive. The
-+ advantage of the newer scheme is that we only have to look through
-+ the list of undefined symbols once, whereas the old method had to
-+ re-search the symbol table each time a new object file was added.
-+
-+ The CHECKFN argument is used to see if an object file should be
-+ included. CHECKFN should set *PNEEDED to TRUE if the object file
-+ should be included, and must also call the bfd_link_info
-+ add_archive_element callback function and handle adding the symbols
-+ to the global hash table. CHECKFN must notice if the callback
-+ indicates a substitute BFD, and arrange to add those symbols instead
-+ if it does so. CHECKFN should only return FALSE if some sort of
-+ error occurs.
-+
-+ For some formats, such as a.out, it is possible to look through an
-+ object file but not actually include it in the link. The
-+ archive_pass field in a BFD is used to avoid checking the symbols
-+ of an object files too many times. When an object is included in
-+ the link, archive_pass is set to -1. If an object is scanned but
-+ not included, archive_pass is set to the pass number. The pass
-+ number is incremented each time a new object file is included. The
-+ pass number is used because when a new object file is included it
-+ may create new undefined symbols which cause a previously examined
-+ object file to be included. */
-
- bfd_boolean
- _bfd_generic_link_add_archive_symbols
- (bfd *abfd,
- struct bfd_link_info *info,
-- bfd_boolean (*checkfn) (bfd *, struct bfd_link_info *,
-- struct bfd_link_hash_entry *, const char *,
-- bfd_boolean *))
-+ bfd_boolean (*checkfn) (bfd *, struct bfd_link_info *, bfd_boolean *))
- {
-- bfd_boolean loop;
-- bfd_size_type amt;
-- unsigned char *included;
-+ carsym *arsyms;
-+ carsym *arsym_end;
-+ register carsym *arsym;
-+ int pass;
-+ struct archive_hash_table arsym_hash;
-+ unsigned int indx;
-+ struct bfd_link_hash_entry **pundef;
-
- if (! bfd_has_map (abfd))
- {
-@@ -944,103 +1059,148 @@ _bfd_generic_link_add_archive_symbols
- return FALSE;
- }
-
-- amt = bfd_ardata (abfd)->symdef_count;
-- if (amt == 0)
-- return TRUE;
-- amt *= sizeof (*included);
-- included = (unsigned char *) bfd_zmalloc (amt);
-- if (included == NULL)
-+ arsyms = bfd_ardata (abfd)->symdefs;
-+ arsym_end = arsyms + bfd_ardata (abfd)->symdef_count;
-+
-+ /* In order to quickly determine whether an symbol is defined in
-+ this archive, we build a hash table of the symbols. */
-+ if (! archive_hash_table_init (&arsym_hash, archive_hash_newfunc,
-+ sizeof (struct archive_hash_entry)))
- return FALSE;
-+ for (arsym = arsyms, indx = 0; arsym < arsym_end; arsym++, indx++)
-+ {
-+ struct archive_hash_entry *arh;
-+ struct archive_list *l, **pp;
-
-- do
-+ arh = archive_hash_lookup (&arsym_hash, arsym->name, TRUE, FALSE);
-+ if (arh == NULL)
-+ goto error_return;
-+ l = ((struct archive_list *)
-+ archive_hash_allocate (&arsym_hash, sizeof (struct archive_list)));
-+ if (l == NULL)
-+ goto error_return;
-+ l->indx = indx;
-+ for (pp = &arh->defs; *pp != NULL; pp = &(*pp)->next)
-+ ;
-+ *pp = l;
-+ l->next = NULL;
-+ }
-+
-+ /* The archive_pass field in the archive itself is used to
-+ initialize PASS, sine we may search the same archive multiple
-+ times. */
-+ pass = abfd->archive_pass + 1;
-+
-+ /* New undefined symbols are added to the end of the list, so we
-+ only need to look through it once. */
-+ pundef = &info->hash->undefs;
-+ while (*pundef != NULL)
- {
-- carsym *arsyms;
-- carsym *arsym_end;
-- carsym *arsym;
-- unsigned int indx;
-- file_ptr last_ar_offset = -1;
-- bfd_boolean needed = FALSE;
-- bfd *element = NULL;
--
-- loop = FALSE;
-- arsyms = bfd_ardata (abfd)->symdefs;
-- arsym_end = arsyms + bfd_ardata (abfd)->symdef_count;
-- for (arsym = arsyms, indx = 0; arsym < arsym_end; arsym++, indx++)
-+ struct bfd_link_hash_entry *h;
-+ struct archive_hash_entry *arh;
-+ struct archive_list *l;
-+
-+ h = *pundef;
-+
-+ /* When a symbol is defined, it is not necessarily removed from
-+ the list. */
-+ if (h->type != bfd_link_hash_undefined
-+ && h->type != bfd_link_hash_common)
- {
-- struct bfd_link_hash_entry *h;
-- struct bfd_link_hash_entry *undefs_tail;
-+ /* Remove this entry from the list, for general cleanliness
-+ and because we are going to look through the list again
-+ if we search any more libraries. We can't remove the
-+ entry if it is the tail, because that would lose any
-+ entries we add to the list later on (it would also cause
-+ us to lose track of whether the symbol has been
-+ referenced). */
-+ if (*pundef != info->hash->undefs_tail)
-+ *pundef = (*pundef)->u.undef.next;
-+ else
-+ pundef = &(*pundef)->u.undef.next;
-+ continue;
-+ }
-
-- if (included[indx])
-- continue;
-- if (needed && arsym->file_offset == last_ar_offset)
-+ /* Look for this symbol in the archive symbol map. */
-+ arh = archive_hash_lookup (&arsym_hash, h->root.string, FALSE, FALSE);
-+ if (arh == NULL)
-+ {
-+ /* If we haven't found the exact symbol we're looking for,
-+ let's look for its import thunk */
-+ if (info->pei386_auto_import)
-+ {
-+ bfd_size_type amt = strlen (h->root.string) + 10;
-+ char *buf = (char *) bfd_malloc (amt);
-+ if (buf == NULL)
-+ return FALSE;
-+
-+ sprintf (buf, "__imp_%s", h->root.string);
-+ arh = archive_hash_lookup (&arsym_hash, buf, FALSE, FALSE);
-+ free(buf);
-+ }
-+ if (arh == NULL)
- {
-- included[indx] = 1;
-+ pundef = &(*pundef)->u.undef.next;
- continue;
- }
-+ }
-+ /* Look at all the objects which define this symbol. */
-+ for (l = arh->defs; l != NULL; l = l->next)
-+ {
-+ bfd *element;
-+ bfd_boolean needed;
-+
-+ /* If the symbol has gotten defined along the way, quit. */
-+ if (h->type != bfd_link_hash_undefined
-+ && h->type != bfd_link_hash_common)
-+ break;
-
-- h = bfd_link_hash_lookup (info->hash, arsym->name,
-- FALSE, FALSE, TRUE);
-+ element = bfd_get_elt_at_index (abfd, l->indx);
-+ if (element == NULL)
-+ goto error_return;
-
-- if (h == NULL
-- && info->pei386_auto_import
-- && CONST_STRNEQ (arsym->name, "__imp_"))
-- h = bfd_link_hash_lookup (info->hash, arsym->name + 6,
-- FALSE, FALSE, TRUE);
-- if (h == NULL)
-+ /* If we've already included this element, or if we've
-+ already checked it on this pass, continue. */
-+ if (element->archive_pass == -1
-+ || element->archive_pass == pass)
- continue;
-
-- if (h->type != bfd_link_hash_undefined
-- && h->type != bfd_link_hash_common)
-+ /* If we can't figure this element out, just ignore it. */
-+ if (! bfd_check_format (element, bfd_object))
- {
-- if (h->type != bfd_link_hash_undefweak)
-- /* Symbol must be defined. Don't check it again. */
-- included[indx] = 1;
-+ element->archive_pass = -1;
- continue;
- }
-
-- if (last_ar_offset != arsym->file_offset)
-- {
-- last_ar_offset = arsym->file_offset;
-- element = _bfd_get_elt_at_filepos (abfd, last_ar_offset);
-- if (element == NULL
-- || !bfd_check_format (element, bfd_object))
-- goto error_return;
-- }
--
-- undefs_tail = info->hash->undefs_tail;
--
- /* CHECKFN will see if this element should be included, and
- go ahead and include it if appropriate. */
-- if (! (*checkfn) (element, info, h, arsym->name, &needed))
-+ if (! (*checkfn) (element, info, &needed))
- goto error_return;
-
-- if (needed)
-+ if (! needed)
-+ element->archive_pass = pass;
-+ else
- {
-- unsigned int mark;
-+ element->archive_pass = -1;
-
-- /* Look backward to mark all symbols from this object file
-- which we have already seen in this pass. */
-- mark = indx;
-- do
-- {
-- included[mark] = 1;
-- if (mark == 0)
-- break;
-- --mark;
-- }
-- while (arsyms[mark].file_offset == last_ar_offset);
--
-- if (undefs_tail != info->hash->undefs_tail)
-- loop = TRUE;
-+ /* Increment the pass count to show that we may need to
-+ recheck object files which were already checked. */
-+ ++pass;
- }
- }
-- } while (loop);
-
-- free (included);
-+ pundef = &(*pundef)->u.undef.next;
-+ }
-+
-+ archive_hash_table_free (&arsym_hash);
-+
-+ /* Save PASS in case we are called again. */
-+ abfd->archive_pass = pass;
-+
- return TRUE;
-
- error_return:
-- free (included);
-+ archive_hash_table_free (&arsym_hash);
- return FALSE;
- }
-
-@@ -1050,14 +1210,12 @@ _bfd_generic_link_add_archive_symbols
- for finding them. */
-
- static bfd_boolean
--generic_link_check_archive_element_no_collect (bfd *abfd,
-+generic_link_check_archive_element_no_collect (
-+ bfd *abfd,
- struct bfd_link_info *info,
-- struct bfd_link_hash_entry *h,
-- const char *name,
- bfd_boolean *pneeded)
- {
-- return generic_link_check_archive_element (abfd, info, h, name, pneeded,
-- FALSE);
-+ return generic_link_check_archive_element (abfd, info, pneeded, FALSE);
- }
-
- /* See if we should include an archive element. This version is used
-@@ -1067,12 +1225,9 @@ generic_link_check_archive_element_no_collect (bfd *abfd,
- static bfd_boolean
- generic_link_check_archive_element_collect (bfd *abfd,
- struct bfd_link_info *info,
-- struct bfd_link_hash_entry *h,
-- const char *name,
- bfd_boolean *pneeded)
- {
-- return generic_link_check_archive_element (abfd, info, h, name, pneeded,
-- TRUE);
-+ return generic_link_check_archive_element (abfd, info, pneeded, TRUE);
- }
-
- /* See if we should include an archive element. Optionally collect
-@@ -1081,8 +1236,6 @@ generic_link_check_archive_element_collect (bfd *abfd,
- static bfd_boolean
- generic_link_check_archive_element (bfd *abfd,
- struct bfd_link_info *info,
-- struct bfd_link_hash_entry *h,
-- const char *name ATTRIBUTE_UNUSED,
- bfd_boolean *pneeded,
- bfd_boolean collect)
- {
-@@ -1098,6 +1251,7 @@ generic_link_check_archive_element (bfd *abfd,
- for (; pp < ppend; pp++)
- {
- asymbol *p;
-+ struct bfd_link_hash_entry *h;
-
- p = *pp;
-
-diff --git a/bfd/pdp11.c b/bfd/pdp11.c
-index 593c5ca..5111a51 100644
---- a/bfd/pdp11.c
-+++ b/bfd/pdp11.c
-@@ -251,7 +251,7 @@ HOWTO( 1, 0, 1, 16, TRUE, 0, complain_overflow_signed,0,"DISP16", TRU
- #define TABLE_SIZE(TABLE) (sizeof(TABLE)/sizeof(TABLE[0]))
-
-
--static bfd_boolean aout_link_check_archive_element (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, const char *, bfd_boolean *);
-+static bfd_boolean aout_link_check_archive_element (bfd *, struct bfd_link_info *, bfd_boolean *);
- static bfd_boolean aout_link_add_object_symbols (bfd *, struct bfd_link_info *);
- static bfd_boolean aout_link_add_symbols (bfd *, struct bfd_link_info *);
- static bfd_boolean aout_link_write_symbols (struct aout_final_link_info *, bfd *);
-@@ -2682,8 +2682,6 @@ aout_link_check_ar_symbols (bfd *abfd,
- static bfd_boolean
- aout_link_check_archive_element (bfd *abfd,
- struct bfd_link_info *info,
-- struct bfd_link_hash_entry *h ATTRIBUTE_UNUSED,
-- const char *name ATTRIBUTE_UNUSED,
- bfd_boolean *pneeded)
- {
- bfd *oldbfd;
-diff --git a/bfd/xcofflink.c b/bfd/xcofflink.c
-index 9522974..dcfd58f 100644
---- a/bfd/xcofflink.c
-+++ b/bfd/xcofflink.c
-@@ -2384,8 +2384,6 @@ xcoff_link_check_ar_symbols (bfd *abfd,
- static bfd_boolean
- xcoff_link_check_archive_element (bfd *abfd,
- struct bfd_link_info *info,
-- struct bfd_link_hash_entry *h ATTRIBUTE_UNUSED,
-- const char *name ATTRIBUTE_UNUSED,
- bfd_boolean *pneeded)
- {
- bfd_boolean keep_syms_p;
-@@ -2465,7 +2463,7 @@ _bfd_xcoff_bfd_link_add_symbols (bfd *abfd, struct bfd_link_info *info)
- bfd_boolean needed;
-
- if (! xcoff_link_check_archive_element (member, info,
-- NULL, NULL, &needed))
-+ &needed))
- return FALSE;
- if (needed)
- member->archive_pass = -1;
diff --git a/projects/binutils/peXXigen.patch b/projects/binutils/peXXigen.patch
deleted file mode 100644
index c2a689a..0000000
--- a/projects/binutils/peXXigen.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From f8e8f1daf12e30d3197b25d6bd10c03d1f932e20 Mon Sep 17 00:00:00 2001
-From: Nick Clifton <nickc at redhat.com>
-Date: Tue, 27 Sep 2016 12:08:19 +0100
-Subject: [PATCH] Ensure that the timestamp in PE/COFF headers is always
- initialised.
-
- PR ld/20634
- * peXXigen.c (_bfd_XXi_only_swap_filehdr_out): Put 0 in the
- timestamp field if real time values are not being stored.
----
- bfd/peXXigen.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/bfd/peXXigen.c b/bfd/peXXigen.c
-index c92c1ea..d713d96 100644
---- a/bfd/peXXigen.c
-+++ b/bfd/peXXigen.c
-@@ -879,6 +879,8 @@ _bfd_XXi_only_swap_filehdr_out (bfd * abfd, void * in, void * out)
- /* Only use a real timestamp if the option was chosen. */
- if ((pe_data (abfd)->insert_timestamp))
- H_PUT_32 (abfd, time (0), filehdr_out->f_timdat);
-+ else
-+ H_PUT_32 (abfd, 0, filehdr_out->f_timdat);
-
- PUT_FILEHDR_SYMPTR (abfd, filehdr_in->f_symptr,
- filehdr_out->f_symptr);
---
-2.1.4
-
diff --git a/projects/mingw-w64/build b/projects/mingw-w64/build
index b2117c5..4be660d 100644
--- a/projects/mingw-w64/build
+++ b/projects/mingw-w64/build
@@ -22,6 +22,10 @@ cd /var/tmp/build
mkdir gcc
cd gcc
tar xJf $rootdir/gcc-[% c("var/gcc_version") %].tar.xz
+# https://gcc.gnu.org/ml/gcc-patches/2018-06/msg01115.html
+# From gcc commit 494c17dc2bf45b8155fb9a14178ab48f01bc12a8
+# libtool: Sort output of 'find' to enable deterministic builds.
+patch -p1 -d gcc-[% c("var/gcc_version") %] < $rootdir/libtool-sort.patch
# We don't want to link against msvcrt.dll due to bug 9084 and want to use
# pthreads, too, as this is needed for ESR60, at least due to bug 1406542.
[% c("arch") %]-w64-mingw32-g++ -dumpspecs > $distdir/msvcr100.spec
diff --git a/projects/mingw-w64/config b/projects/mingw-w64/config
index b9185f3..19a7a82 100644
--- a/projects/mingw-w64/config
+++ b/projects/mingw-w64/config
@@ -34,3 +34,4 @@ input_files:
sha256sum: 850bf21eafdfe5cd5f6827148184c08c4a0852a37ccf36ce69855334d2c914d4
- name: binutils
project: binutils
+ - filename: libtool-sort.patch
diff --git a/projects/mingw-w64/libtool-sort.patch b/projects/mingw-w64/libtool-sort.patch
new file mode 100644
index 0000000..7c7fa85
--- /dev/null
+++ b/projects/mingw-w64/libtool-sort.patch
@@ -0,0 +1,67 @@
+From 494c17dc2bf45b8155fb9a14178ab48f01bc12a8 Mon Sep 17 00:00:00 2001
+From: law <law at 138bc75d-0d04-0410-961f-82ee72b054a4>
+Date: Thu, 5 Jul 2018 19:13:45 +0000
+Subject: [PATCH 1/1] * libtool.m4: Sort output of 'find' to enable
+ deterministic builds. * ltmain.sh: Likewise.
+
+git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@262451 138bc75d-0d04-0410-961f-82ee72b054a4
+---
+ ChangeLog | 5 +++++
+ libtool.m4 | 8 ++++----
+ ltmain.sh | 4 ++--
+ 3 files changed, 11 insertions(+), 6 deletions(-)
+
+diff --git a/libtool.m4 b/libtool.m4
+index 24d13f3..940faaa 100644
+--- a/libtool.m4
++++ b/libtool.m4
+@@ -6005,20 +6005,20 @@ if test "$_lt_caught_CXX_error" != yes; then
+ _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
+- compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
++ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"'
+ _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
+- $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
++ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~
+ $RANLIB $oldlib'
+ _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+- $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
++ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
+ rm -rf $tpldir~
+ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
+- $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
++ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
+ ;;
+ *) # Version 6 and above use weak symbols
+ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
+diff --git a/ltmain.sh b/ltmain.sh
+index 9503ec8..79f9ba8 100644
+--- a/ltmain.sh
++++ b/ltmain.sh
+@@ -2917,7 +2917,7 @@ func_extract_archives ()
+ darwin_file=
+ darwin_files=
+ for darwin_file in $darwin_filelist; do
+- darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
++ darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP`
+ $LIPO -create -output "$darwin_file" $darwin_files
+ done # $darwin_filelist
+ $RM -rf unfat-$$
+@@ -2932,7 +2932,7 @@ func_extract_archives ()
+ func_extract_an_archive "$my_xdir" "$my_xabs"
+ ;;
+ esac
+- my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
++ my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP`
+ done
+
+ func_extract_archives_result="$my_oldobjs"
+--
+2.9.3
+
More information about the tbb-commits
mailing list