summary refs log tree commit diff
path: root/pkgs/development/tools/misc/binutils/R_ARM_COPY.patch
diff options
context:
space:
mode:
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);
+