forked from mirrors/nixpkgs
30 lines
1.2 KiB
Diff
30 lines
1.2 KiB
Diff
|
@@ -, +, @@
|
||
|
---
|
||
|
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);
|
||
|
|