From 0deec20d46dd26e5fcfc3ce232ea2de94719d75d Mon Sep 17 00:00:00 2001 From: Yureka Date: Mon, 3 Oct 2022 13:38:51 +0200 Subject: [PATCH] binutils: drop R_ARM_COPY.patch This reverts commit b3640e024f01453b3c4f720135dc6cff529da8ab. When applied, the patch causes some dynamic relocations to be missing, even in cases where they are clearly needed. This causes bugs such as https://github.com/NixOS/nixpkgs/issues/107386 where `fprintf(stderr, ...)` segfaults because the stderr relocation was not added. --- .../tools/misc/binutils/2.38/R_ARM_COPY.patch | 29 ------------------- .../tools/misc/binutils/2.38/default.nix | 8 ----- .../tools/misc/binutils/R_ARM_COPY.patch | 29 ------------------- .../tools/misc/binutils/default.nix | 8 ----- 4 files changed, 74 deletions(-) delete mode 100644 pkgs/development/tools/misc/binutils/2.38/R_ARM_COPY.patch delete mode 100644 pkgs/development/tools/misc/binutils/R_ARM_COPY.patch diff --git a/pkgs/development/tools/misc/binutils/2.38/R_ARM_COPY.patch b/pkgs/development/tools/misc/binutils/2.38/R_ARM_COPY.patch deleted file mode 100644 index 874809863523..000000000000 --- a/pkgs/development/tools/misc/binutils/2.38/R_ARM_COPY.patch +++ /dev/null @@ -1,29 +0,0 @@ -@@ -, +, @@ ---- - bfd/elf32-arm.c | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) ---- a/bfd/elf32-arm.c -+++ a/bfd/elf32-arm.c -@@ -15398,7 +15398,11 @@ elf32_arm_adjust_dynamic_symbol (struct bfd_link_info * info, - linker to copy the initial value out of the dynamic object and into - the runtime process image. We need to remember the offset into the - .rel(a).bss section we are going to use. */ -- if ((h->root.u.def.section->flags & SEC_READONLY) != 0) -+ if (info->nocopyreloc == 0 -+ && (h->root.u.def.section->flags & SEC_ALLOC) != 0 -+ /* PR 16177: A copy is only needed if the input section is readonly. */ -+ && (h->root.u.def.section->flags & SEC_READONLY) != 0 -+ && h->size != 0) - { - s = globals->root.sdynrelro; - srel = globals->root.sreldynrelro; -@@ -15410,6 +15414,8 @@ elf32_arm_adjust_dynamic_symbol (struct bfd_link_info * info, - } - if (info->nocopyreloc == 0 - && (h->root.u.def.section->flags & SEC_ALLOC) != 0 -+ /* PR 16177: A copy is only needed if the input section is readonly. */ -+ && (h->root.u.def.section->flags & SEC_READONLY) != 0 - && h->size != 0) - { - elf32_arm_allocate_dynrelocs (info, srel, 1); - diff --git a/pkgs/development/tools/misc/binutils/2.38/default.nix b/pkgs/development/tools/misc/binutils/2.38/default.nix index 3ea42ee42299..820f667bf9d0 100644 --- a/pkgs/development/tools/misc/binutils/2.38/default.nix +++ b/pkgs/development/tools/misc/binutils/2.38/default.nix @@ -90,14 +90,6 @@ stdenv.mkDerivation { ./deterministic-temp-prefixes.patch ] ++ lib.optional targetPlatform.isiOS ./support-ios.patch - # This patch was suggested by Nick Clifton to fix - # https://sourceware.org/bugzilla/show_bug.cgi?id=16177 - # It can be removed when that 7-year-old bug is closed. - # This binutils bug causes GHC to emit broken binaries on armv7, and indeed - # GHC will refuse to compile with a binutils suffering from it. See this - # comment for more information: - # https://gitlab.haskell.org/ghc/ghc/issues/4210#note_78333 - ++ lib.optional (targetPlatform.isAarch32 && hostPlatform.system != targetPlatform.system) ./R_ARM_COPY.patch ++ lib.optional stdenv.targetPlatform.isWindows ./windres-locate-gcc.patch ++ lib.optional stdenv.targetPlatform.isMips64n64 # this patch is from debian: diff --git a/pkgs/development/tools/misc/binutils/R_ARM_COPY.patch b/pkgs/development/tools/misc/binutils/R_ARM_COPY.patch deleted file mode 100644 index 874809863523..000000000000 --- a/pkgs/development/tools/misc/binutils/R_ARM_COPY.patch +++ /dev/null @@ -1,29 +0,0 @@ -@@ -, +, @@ ---- - bfd/elf32-arm.c | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) ---- a/bfd/elf32-arm.c -+++ a/bfd/elf32-arm.c -@@ -15398,7 +15398,11 @@ elf32_arm_adjust_dynamic_symbol (struct bfd_link_info * info, - linker to copy the initial value out of the dynamic object and into - the runtime process image. We need to remember the offset into the - .rel(a).bss section we are going to use. */ -- if ((h->root.u.def.section->flags & SEC_READONLY) != 0) -+ if (info->nocopyreloc == 0 -+ && (h->root.u.def.section->flags & SEC_ALLOC) != 0 -+ /* PR 16177: A copy is only needed if the input section is readonly. */ -+ && (h->root.u.def.section->flags & SEC_READONLY) != 0 -+ && h->size != 0) - { - s = globals->root.sdynrelro; - srel = globals->root.sreldynrelro; -@@ -15410,6 +15414,8 @@ elf32_arm_adjust_dynamic_symbol (struct bfd_link_info * info, - } - if (info->nocopyreloc == 0 - && (h->root.u.def.section->flags & SEC_ALLOC) != 0 -+ /* PR 16177: A copy is only needed if the input section is readonly. */ -+ && (h->root.u.def.section->flags & SEC_READONLY) != 0 - && h->size != 0) - { - elf32_arm_allocate_dynrelocs (info, srel, 1); - diff --git a/pkgs/development/tools/misc/binutils/default.nix b/pkgs/development/tools/misc/binutils/default.nix index e5ecc365d48b..c294dbbb3559 100644 --- a/pkgs/development/tools/misc/binutils/default.nix +++ b/pkgs/development/tools/misc/binutils/default.nix @@ -93,14 +93,6 @@ stdenv.mkDerivation { ./gas-dwarf-zero-PR29451.patch ] ++ lib.optional targetPlatform.isiOS ./support-ios.patch - # This patch was suggested by Nick Clifton to fix - # https://sourceware.org/bugzilla/show_bug.cgi?id=16177 - # It can be removed when that 7-year-old bug is closed. - # This binutils bug causes GHC to emit broken binaries on armv7, and indeed - # GHC will refuse to compile with a binutils suffering from it. See this - # comment for more information: - # https://gitlab.haskell.org/ghc/ghc/issues/4210#note_78333 - ++ lib.optional (targetPlatform.isAarch32 && hostPlatform.system != targetPlatform.system) ./R_ARM_COPY.patch ++ lib.optional stdenv.targetPlatform.isWindows ./windres-locate-gcc.patch ++ lib.optional stdenv.targetPlatform.isMips64n64 # this patch is from debian: