diff --git a/pkgs/development/libraries/glibc/avoid-semver-on-common.patch b/pkgs/development/libraries/glibc/avoid-semver-on-common.patch deleted file mode 100644 index 966325d6f183..000000000000 --- a/pkgs/development/libraries/glibc/avoid-semver-on-common.patch +++ /dev/null @@ -1,65 +0,0 @@ -From 0edeadc0d396aa713b808ae50a0058aca5d3837e Mon Sep 17 00:00:00 2001 -From: "H.J. Lu" -Date: Wed, 26 Jul 2017 10:08:46 -0700 -Subject: [PATCH] Avoid .symver on common symbols [BZ #21666] - -The .symver directive on common symbol just creates a new common symbol, -not an alias and the newer assembler with the bug fix for - -https://sourceware.org/bugzilla/show_bug.cgi?id=21661 - -will issue an error. Before the fix, we got - -$ readelf -sW libc.so | grep "loc[12s]" - 5109: 00000000003a0608 8 OBJECT LOCAL DEFAULT 36 loc1 - 5188: 00000000003a0610 8 OBJECT LOCAL DEFAULT 36 loc2 - 5455: 00000000003a0618 8 OBJECT LOCAL DEFAULT 36 locs - 6575: 00000000003a05f0 8 OBJECT GLOBAL DEFAULT 36 locs@GLIBC_2.2.5 - 7156: 00000000003a05f8 8 OBJECT GLOBAL DEFAULT 36 loc1@GLIBC_2.2.5 - 7312: 00000000003a0600 8 OBJECT GLOBAL DEFAULT 36 loc2@GLIBC_2.2.5 - -in libc.so. The versioned loc1, loc2 and locs have the wrong addresses. -After the fix, we got - -$ readelf -sW libc.so | grep "loc[12s]" - 6570: 000000000039e3b8 8 OBJECT GLOBAL DEFAULT 34 locs@GLIBC_2.2.5 - 7151: 000000000039e3c8 8 OBJECT GLOBAL DEFAULT 34 loc1@GLIBC_2.2.5 - 7307: 000000000039e3c0 8 OBJECT GLOBAL DEFAULT 34 loc2@GLIBC_2.2.5 - - [BZ #21666] - * misc/regexp.c (loc1): Add __attribute__ ((nocommon)); - (loc2): Likewise. - (locs): Likewise. - -(cherry picked from commit 388b4f1a02f3a801965028bbfcd48d905638b797) ---- - ChangeLog | 7 +++++++ - misc/regexp.c | 9 +++++---- - 2 files changed, 12 insertions(+), 4 deletions(-) - -diff --git a/misc/regexp.c b/misc/regexp.c -index 19d76c0..eaea7c3 100644 ---- a/misc/regexp.c -+++ b/misc/regexp.c -@@ -29,14 +29,15 @@ - - #if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_23) - --/* Define the variables used for the interface. */ --char *loc1; --char *loc2; -+/* Define the variables used for the interface. Avoid .symver on common -+ symbol, which just creates a new common symbol, not an alias. */ -+char *loc1 __attribute__ ((nocommon)); -+char *loc2 __attribute__ ((nocommon)); - compat_symbol (libc, loc1, loc1, GLIBC_2_0); - compat_symbol (libc, loc2, loc2, GLIBC_2_0); - - /* Although we do not support the use we define this variable as well. */ --char *locs; -+char *locs __attribute__ ((nocommon)); - compat_symbol (libc, locs, locs, GLIBC_2_0); - - --- -2.9.3 diff --git a/pkgs/development/libraries/glibc/common.nix b/pkgs/development/libraries/glibc/common.nix index d1c5446e807f..1b53acf12b17 100644 --- a/pkgs/development/libraries/glibc/common.nix +++ b/pkgs/development/libraries/glibc/common.nix @@ -64,9 +64,6 @@ stdenv.mkDerivation ({ ./CVE-2017-1000366-rtld-LD_LIBRARY_PATH.patch ./CVE-2017-1000366-rtld-LD_PRELOAD.patch ./CVE-2017-1000366-rtld-LD_AUDIT.patch - - /* https://sourceware.org/bugzilla/show_bug.cgi?id=21666 */ - ./avoid-semver-on-common.patch ] ++ lib.optionals stdenv.isi686 [ ./fix-i686-memchr.patch diff --git a/pkgs/development/tools/misc/binutils/default.nix b/pkgs/development/tools/misc/binutils/default.nix index dda2a78097a6..e02cf1667cdf 100644 --- a/pkgs/development/tools/misc/binutils/default.nix +++ b/pkgs/development/tools/misc/binutils/default.nix @@ -5,7 +5,10 @@ }: let - version = "2.29"; + # Note to whoever is upgrading this: 2.29 is broken. + # ('nix-build pkgs/stdenv/linux/make-bootstrap-tools.nix -A test' segfaults on aarch64) + # Also glibc might need patching, see commit 733e20fee4a6700510f71fbe1a58ac23ea202f6a. + version = "2.28.1"; basename = "binutils-${version}"; inherit (stdenv.lib) optional optionals optionalString; # The prefix prepended to binary names to allow multiple binuntils on the @@ -18,7 +21,7 @@ stdenv.mkDerivation rec { src = fetchurl { url = "mirror://gnu/binutils/${basename}.tar.bz2"; - sha256 = "1gqfyksdnj3iir5gzyvlp785mnk60g1pll6zbzbslfchhr4rb8i9"; + sha256 = "1sj234nd05cdgga1r36zalvvdkvpfbr12g5mir2n8i1dwsdrj939"; }; patches = [ @@ -45,15 +48,6 @@ stdenv.mkDerivation rec { # there) and causes a cycle between the lib and bin outputs, so # get rid of it. ./no-plugins.patch - - # remove after 2.29.1/2.30 - (fetchurl { - url = "https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;a=patch;h=c6b78c965a96fb152fbd58926edccb5dee2707a5"; - sha256 = "0rkbq5pf7ffgcggfk4czkxin1091bqjj92an9wxnqkgqwq6cx5yr"; - name = "readelf-empty-sections.patch"; - }) - ./elf-check-orphan-input.patch - ./elf-check-orphan-placement.patch ]; outputs = [ "out" ] @@ -90,7 +84,7 @@ stdenv.mkDerivation rec { else "-static-libgcc"; # TODO(@Ericson2314): Always pass "--target" and always prefix. - configurePlatforms = [ "build" "host" ] ++ stdenv.lib.optional (targetPlatform != hostPlatform) "target"; + configurePlatforms = stdenv.lib.optionals (targetPlatform != hostPlatform) [ "build" "host" "target" ]; configureFlags = [ "--enable-shared" "--enable-deterministic-archives" "--disable-werror" ] ++ optional (stdenv.system == "mips64el-linux") "--enable-fix-loongson2f-nop" diff --git a/pkgs/development/tools/misc/binutils/elf-check-orphan-input.patch b/pkgs/development/tools/misc/binutils/elf-check-orphan-input.patch deleted file mode 100644 index 2ec90128347e..000000000000 --- a/pkgs/development/tools/misc/binutils/elf-check-orphan-input.patch +++ /dev/null @@ -1,99 +0,0 @@ -From a388b7afeffad6411686d39dc1c62294da48a814 Mon Sep 17 00:00:00 2001 -From: "H.J. Lu" -Date: Wed, 2 Aug 2017 05:10:29 -0700 -Subject: [PATCH] Check ELF section header only for ELF output - -When placing an orphan input section, check ELF section header only for -ELF output. - - PR ld/21884 - * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Check - ELF section header only for ELF output. - * testsuite/ld-elf/pr21884.d: New test. - * testsuite/ld-elf/pr21884.t: Likewise. - * testsuite/ld-elf/pr21884a.s: Likewise. - * testsuite/ld-elf/pr21884b.s: Likewise. - -(cherry picked from commit db99ecc08f5b66fbe9cb72e90352c7f77ec71a6e) ---- - ld/ChangeLog | 10 ++++++++++ - ld/emultempl/elf32.em | 3 ++- - ld/testsuite/ld-elf/pr21884.d | 11 +++++++++++ - ld/testsuite/ld-elf/pr21884.t | 7 +++++++ - ld/testsuite/ld-elf/pr21884a.s | 5 +++++ - ld/testsuite/ld-elf/pr21884b.s | 5 +++++ - 6 files changed, 40 insertions(+), 1 deletion(-) - create mode 100644 ld/testsuite/ld-elf/pr21884.d - create mode 100644 ld/testsuite/ld-elf/pr21884.t - create mode 100644 ld/testsuite/ld-elf/pr21884a.s - create mode 100644 ld/testsuite/ld-elf/pr21884b.s - -diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em -index d2551b6..75ded12 100644 ---- a/ld/emultempl/elf32.em -+++ b/ld/emultempl/elf32.em -@@ -2136,7 +2136,8 @@ gld${EMULATION_NAME}_place_orphan (asection *s, - } - - /* Look through the script to see where to place this section. */ -- if (constraint == 0) -+ if (constraint == 0 -+ && link_info.output_bfd->xvec->flavour == bfd_target_elf_flavour) - for (os = lang_output_section_find (secname); - os != NULL; - os = next_matching_output_section_statement (os, 0)) -diff --git a/ld/testsuite/ld-elf/pr21884.d b/ld/testsuite/ld-elf/pr21884.d -new file mode 100644 -index 0000000..52cd2c1 ---- /dev/null -+++ b/ld/testsuite/ld-elf/pr21884.d -@@ -0,0 +1,11 @@ -+#source: pr21884a.s -+#source: pr21884b.s -+#ld: -T pr21884.t -+#objdump: -b binary -s -+#notarget: aarch64*-*-* arm*-*-* nds32*-*-* -+# Skip targets which can't change output format to binary. -+ -+.*: file format binary -+ -+Contents of section .data: -+#pass -diff --git a/ld/testsuite/ld-elf/pr21884.t b/ld/testsuite/ld-elf/pr21884.t -new file mode 100644 -index 0000000..d483911 ---- /dev/null -+++ b/ld/testsuite/ld-elf/pr21884.t -@@ -0,0 +1,7 @@ -+OUTPUT_FORMAT("binary") -+ -+ENTRY(_main); -+SECTIONS { -+ . = 0; -+ .setup : { *(.setup) } -+} -diff --git a/ld/testsuite/ld-elf/pr21884a.s b/ld/testsuite/ld-elf/pr21884a.s -new file mode 100644 -index 0000000..a3361b2 ---- /dev/null -+++ b/ld/testsuite/ld-elf/pr21884a.s -@@ -0,0 +1,5 @@ -+ .text -+ .globl _main -+ .type _main,%function -+_main: -+ .dc.a bar -diff --git a/ld/testsuite/ld-elf/pr21884b.s b/ld/testsuite/ld-elf/pr21884b.s -new file mode 100644 -index 0000000..e533837 ---- /dev/null -+++ b/ld/testsuite/ld-elf/pr21884b.s -@@ -0,0 +1,5 @@ -+ .text -+ .globl bar -+ .type bar,%function -+bar: -+ .byte 0 --- -2.9.3 - diff --git a/pkgs/development/tools/misc/binutils/elf-check-orphan-placement.patch b/pkgs/development/tools/misc/binutils/elf-check-orphan-placement.patch deleted file mode 100644 index 7e7566aec43d..000000000000 --- a/pkgs/development/tools/misc/binutils/elf-check-orphan-placement.patch +++ /dev/null @@ -1,161 +0,0 @@ -From 36088682f447540fd8666a2c437fa232064044a7 Mon Sep 17 00:00:00 2001 -From: Alan Modra -Date: Thu, 3 Aug 2017 14:01:34 +0930 -Subject: [PATCH] ELF checks for orphan placement - -The loop checking for previous orphan placement should run even when -the output is non-ELF. - - PR ld/21884 - * emultempl/elf32.em (gld${EMULATION_NAME}_place_orphan): Revert - last change. Rename iself to elfinput. Expand comments. Condition - ELF checks on having both input and output ELF files. Extract.. - (elf_orphan_compatible): ..this new function. ---- - ld/ChangeLog | 8 ++++++ - ld/emultempl/elf32.em | 76 +++++++++++++++++++++++++++++++-------------------- - 2 files changed, 55 insertions(+), 29 deletions(-) - -diff --git a/ld/emultempl/elf32.em b/ld/emultempl/elf32.em -index 75ded12..9ac1840 100644 ---- a/ld/emultempl/elf32.em -+++ b/ld/emultempl/elf32.em -@@ -2008,6 +2008,29 @@ output_rel_find (asection *sec, int isdyn) - return last; - } - -+/* Return whether IN is suitable to be part of OUT. */ -+ -+static bfd_boolean -+elf_orphan_compatible (asection *in, asection *out) -+{ -+ /* Non-zero sh_info implies a section with SHF_INFO_LINK with -+ unknown semantics for the generic linker, or a SHT_REL/SHT_RELA -+ section where sh_info specifies a symbol table. (We won't see -+ SHT_GROUP, SHT_SYMTAB or SHT_DYNSYM sections here.) We clearly -+ can't merge SHT_REL/SHT_RELA using differing symbol tables, and -+ shouldn't merge sections with differing unknown semantics. */ -+ if (elf_section_data (out)->this_hdr.sh_info -+ != elf_section_data (in)->this_hdr.sh_info) -+ return FALSE; -+ /* We can't merge two sections with differing SHF_EXCLUDE when doing -+ a relocatable link. */ -+ if (bfd_link_relocatable (&link_info) -+ && ((elf_section_flags (out) ^ elf_section_flags (in)) & SHF_EXCLUDE) != 0) -+ return FALSE; -+ return _bfd_elf_match_sections_by_type (link_info.output_bfd, out, -+ in->owner, in); -+} -+ - /* Place an orphan section. We use this to put random SHF_ALLOC - sections in the right segment. */ - -@@ -2064,8 +2087,9 @@ gld${EMULATION_NAME}_place_orphan (asection *s, - lang_output_section_statement_type *os; - lang_output_section_statement_type *match_by_name = NULL; - int isdyn = 0; -- int iself = s->owner->xvec->flavour == bfd_target_elf_flavour; -- unsigned int sh_type = iself ? elf_section_type (s) : SHT_NULL; -+ int elfinput = s->owner->xvec->flavour == bfd_target_elf_flavour; -+ int elfoutput = link_info.output_bfd->xvec->flavour == bfd_target_elf_flavour; -+ unsigned int sh_type = elfinput ? elf_section_type (s) : SHT_NULL; - flagword flags; - asection *nexts; - -@@ -2073,7 +2097,7 @@ gld${EMULATION_NAME}_place_orphan (asection *s, - && link_info.combreloc - && (s->flags & SEC_ALLOC)) - { -- if (iself) -+ if (elfinput) - switch (sh_type) - { - case SHT_RELA: -@@ -2095,6 +2119,8 @@ gld${EMULATION_NAME}_place_orphan (asection *s, - } - - if (!bfd_link_relocatable (&link_info) -+ && elfinput -+ && elfoutput - && (s->flags & SEC_ALLOC) != 0 - && (elf_section_flags (s) & SHF_GNU_MBIND) != 0) - { -@@ -2135,9 +2161,11 @@ gld${EMULATION_NAME}_place_orphan (asection *s, - secname = ".mbind.text"; - } - -- /* Look through the script to see where to place this section. */ -- if (constraint == 0 -- && link_info.output_bfd->xvec->flavour == bfd_target_elf_flavour) -+ /* Look through the script to see where to place this section. The -+ script includes entries added by previous lang_insert_orphan -+ calls, so this loop puts multiple compatible orphans of the same -+ name into a single output section. */ -+ if (constraint == 0) - for (os = lang_output_section_find (secname); - os != NULL; - os = next_matching_output_section_statement (os, 0)) -@@ -2146,29 +2174,19 @@ gld${EMULATION_NAME}_place_orphan (asection *s, - lang_insert_orphan to create a new output section. */ - constraint = SPECIAL; - -- /* SEC_EXCLUDE is cleared when doing a relocatable link. But -- we can't merge 2 input sections with the same name when only -- one of them has SHF_EXCLUDE. Don't merge 2 sections with -- different sh_info. */ -+ /* Check to see if we already have an output section statement -+ with this name, and its bfd section has compatible flags. -+ If the section already exists but does not have any flags -+ set, then it has been created by the linker, possibly as a -+ result of a --section-start command line switch. */ - if (os->bfd_section != NULL -- && (elf_section_data (os->bfd_section)->this_hdr.sh_info -- == elf_section_data (s)->this_hdr.sh_info) - && (os->bfd_section->flags == 0 -- || ((!bfd_link_relocatable (&link_info) -- || (iself && (((elf_section_flags (s) -- ^ elf_section_flags (os->bfd_section)) -- & SHF_EXCLUDE) == 0))) -- && ((s->flags ^ os->bfd_section->flags) -+ || (((s->flags ^ os->bfd_section->flags) - & (SEC_LOAD | SEC_ALLOC)) == 0 -- && _bfd_elf_match_sections_by_type (link_info.output_bfd, -- os->bfd_section, -- s->owner, s)))) -+ && (!elfinput -+ || !elfoutput -+ || elf_orphan_compatible (s, os->bfd_section))))) - { -- /* We already have an output section statement with this -- name, and its bfd section has compatible flags. -- If the section already exists but does not have any flags -- set, then it has been created by the linker, probably as a -- result of a --section-start command line switch. */ - lang_add_section (&os->children, s, NULL, os); - return os; - } -@@ -2244,8 +2262,8 @@ gld${EMULATION_NAME}_place_orphan (asection *s, - else if ((flags & SEC_ALLOC) == 0) - ; - else if ((flags & SEC_LOAD) != 0 -- && ((iself && sh_type == SHT_NOTE) -- || (!iself && CONST_STRNEQ (secname, ".note")))) -+ && ((elfinput && sh_type == SHT_NOTE) -+ || (!elfinput && CONST_STRNEQ (secname, ".note")))) - place = &hold[orphan_interp]; - else if ((flags & (SEC_LOAD | SEC_HAS_CONTENTS | SEC_THREAD_LOCAL)) == 0) - place = &hold[orphan_bss]; -@@ -2255,8 +2273,8 @@ gld${EMULATION_NAME}_place_orphan (asection *s, - place = &hold[orphan_tdata]; - else if ((flags & SEC_READONLY) == 0) - place = &hold[orphan_data]; -- else if (((iself && (sh_type == SHT_RELA || sh_type == SHT_REL)) -- || (!iself && CONST_STRNEQ (secname, ".rel"))) -+ else if (((elfinput && (sh_type == SHT_RELA || sh_type == SHT_REL)) -+ || (!elfinput && CONST_STRNEQ (secname, ".rel"))) - && (flags & SEC_LOAD) != 0) - place = &hold[orphan_rel]; - else if ((flags & SEC_CODE) == 0) --- -2.9.3 -