From 539f59256dd8b503b1188eecb30a338ee38616f8 Mon Sep 17 00:00:00 2001 From: Ben Gamari Date: Sat, 1 Jul 2017 22:54:56 +0000 Subject: [PATCH] Fix #16177 --- bfd/elf32-arm.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c index b9f5d04a56d..02a1c18b8bc 100644 --- a/bfd/elf32-arm.c +++ b/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);