summary refs log tree commit diff
path: root/pkgs/development/tools/misc/binutils/R_ARM_COPY.patch
diff options
context:
space:
mode:
authorJoe Hermaszewski <git@monoid.al>2020-11-08 23:54:18 +0800
committerJoe Hermaszewski <git@monoid.al>2020-11-28 20:19:05 +0800
commitb3640e024f01453b3c4f720135dc6cff529da8ab (patch)
treefb54ae4023e3be074eccf45ee4b1ae9fef577540 /pkgs/development/tools/misc/binutils/R_ARM_COPY.patch
parent15b3bc33064eeb0cba743cad585c829b6694669c (diff)
downloadnixpkgs-b3640e024f01453b3c4f720135dc6cff529da8ab.tar
nixpkgs-b3640e024f01453b3c4f720135dc6cff529da8ab.tar.gz
nixpkgs-b3640e024f01453b3c4f720135dc6cff529da8ab.tar.bz2
nixpkgs-b3640e024f01453b3c4f720135dc6cff529da8ab.tar.lz
nixpkgs-b3640e024f01453b3c4f720135dc6cff529da8ab.tar.xz
nixpkgs-b3640e024f01453b3c4f720135dc6cff529da8ab.tar.zst
nixpkgs-b3640e024f01453b3c4f720135dc6cff529da8ab.zip
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).
Diffstat (limited to 'pkgs/development/tools/misc/binutils/R_ARM_COPY.patch')
-rw-r--r--pkgs/development/tools/misc/binutils/R_ARM_COPY.patch29
1 files changed, 29 insertions, 0 deletions
diff --git a/pkgs/development/tools/misc/binutils/R_ARM_COPY.patch b/pkgs/development/tools/misc/binutils/R_ARM_COPY.patch
new file mode 100644
index 00000000000..87480986352
--- /dev/null
+++ b/pkgs/development/tools/misc/binutils/R_ARM_COPY.patch
@@ -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);
+