binutils: patch to fix https://sourceware.org/bugzilla/show_bug.cgi?id=16177
This bug was preventing one compiling Haskell programs from `pkgsMusl` for armv7. `nix-build --argstr crossSystem "armv7l-linux" -A pkgsMusl.haskellPackages.hello` succeeds with this patch. The patch is Nick Clifton's one, rebased by @ericson2314 here https://sourceware.org/bugzilla/show_bug.cgi?id=16177#c6 Although there was some talk about the efficacy of the binutils patch (https://sourceware.org/bugzilla/show_bug.cgi?id=16177#c9) the resulting binary seems to run without issue on the target platform. Jessica's patch there caused ld to fail linking some programs. Nick's proposed patch has worked well in my testing so far (a Haskell project of some small complexity cross compiled with musl to armv7).
This commit is contained in:
parent
15b3bc3306
commit
b3640e024f
2 changed files with 37 additions and 0 deletions
29
pkgs/development/tools/misc/binutils/R_ARM_COPY.patch
Normal file
29
pkgs/development/tools/misc/binutils/R_ARM_COPY.patch
Normal file
|
@ -0,0 +1,29 @@
|
|||
@@ -, +, @@
|
||||
---
|
||||
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);
|
||||
|
|
@ -101,6 +101,14 @@ stdenv.mkDerivation {
|
|||
./patches/2.31/0001-x86-Properly-add-X86_ISA_1_NEEDED-property.patch
|
||||
]
|
||||
++ lib.optional stdenv.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 stdenv.targetPlatform.isAarch32 ./R_ARM_COPY.patch
|
||||
;
|
||||
|
||||
outputs = [ "out" "info" "man" ];
|
||||
|
|
Loading…
Reference in a new issue