mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-09 21:00:42 +02:00
All the Linux builds using GCC uses the binutils bundled with GCC. This gives us some leeway to update the binutils used for clang builds (using the binutils toolchain as of bug 1486998) separately. Since we only ship builds using GCC, we're more free to upgrade binutils for clang builds, without worrying about the next merge. This upgrades to the last released version of binutils, and applies the patch from https://sourceware.org/bugzilla/show_bug.cgi?id=23591 on top, so that asan fuzzing builds don't fail. The GPG key used to sign the upstream tarball is unfortunately not connected to the web of trust. I verified the contents matched what's in the Debian archive (which has a different tarball, because some files are removed/modified in Debian for license reasons ; there were no differences besides those). Differential Revision: https://phabricator.services.mozilla.com/D4748 --HG-- extra : moz-landing-system : lando
78 lines
2.2 KiB
Bash
Executable file
78 lines
2.2 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
binutils_version=2.31.1
|
|
make_flags="-j$(nproc)"
|
|
|
|
root_dir="$1"
|
|
|
|
cd $root_dir
|
|
|
|
cd binutils-$binutils_version
|
|
|
|
patch -p1 <<'EOF'
|
|
From 4476cc67e657d6b26cd453c555a611f1ab956660 Mon Sep 17 00:00:00 2001
|
|
From: "H.J. Lu" <hjl.tools@gmail.com>
|
|
Date: Thu, 30 Aug 2018 09:21:57 -0700
|
|
Subject: [PATCH] ld: Lookup section in output with the same name
|
|
|
|
When there are more than one input sections with the same section name,
|
|
SECNAME, linker picks the first one to define __start_SECNAME and
|
|
__stop_SECNAME symbols. When the first input section is removed by
|
|
comdat group, we need to check if there is still an output section
|
|
with section name SECNAME.
|
|
|
|
PR ld/23591
|
|
* ldlang.c (undef_start_stop): Lookup section in output with
|
|
the same name.
|
|
---
|
|
ld/ldlang.c | 18 ++++++++++++++++++
|
|
1 file changed, 18 insertions(+)
|
|
|
|
diff --git a/ld/ldlang.c b/ld/ldlang.c
|
|
index 8878ccd..d644b56 100644
|
|
--- a/ld/ldlang.c
|
|
+++ b/ld/ldlang.c
|
|
@@ -6097,6 +6097,24 @@ undef_start_stop (struct bfd_link_hash_entry *h)
|
|
|| strcmp (h->u.def.section->name,
|
|
h->u.def.section->output_section->name) != 0)
|
|
{
|
|
+ asection *sec = bfd_get_section_by_name (link_info.output_bfd,
|
|
+ h->u.def.section->name);
|
|
+ if (sec != NULL)
|
|
+ {
|
|
+ /* When there are more than one input sections with the same
|
|
+ section name, SECNAME, linker picks the first one to define
|
|
+ __start_SECNAME and __stop_SECNAME symbols. When the first
|
|
+ input section is removed by comdat group, we need to check
|
|
+ if there is still an output section with section name
|
|
+ SECNAME. */
|
|
+ asection *i;
|
|
+ for (i = sec->map_head.s; i != NULL; i = i->map_head.s)
|
|
+ if (strcmp (h->u.def.section->name, i->name) == 0)
|
|
+ {
|
|
+ h->u.def.section = i;
|
|
+ return;
|
|
+ }
|
|
+ }
|
|
h->type = bfd_link_hash_undefined;
|
|
h->u.undef.abfd = NULL;
|
|
}
|
|
--
|
|
2.17.1
|
|
EOF
|
|
|
|
cd ..
|
|
|
|
# Build binutils
|
|
mkdir binutils-objdir
|
|
cd binutils-objdir
|
|
|
|
../binutils-$binutils_version/configure --prefix /tools/binutils/ --enable-gold --enable-plugins --disable-nls || exit 1
|
|
make $make_flags || exit 1
|
|
make install $make_flags DESTDIR=$root_dir || exit 1
|
|
|
|
cd ..
|
|
|
|
# Make a package of the built binutils
|
|
cd $root_dir/tools
|
|
tar caf $root_dir/binutils.tar.xz binutils/
|