diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 7195221c0c..c384a0f028 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2017-06-29 Andrew Waterman + + * elfnn-riscv.c (riscv_elf_adjust_dynamic_symbol): Fix TLS copy + relocs. + 2017-06-29 Egeyar Bagcioglu * elfxx-sparc.c (allocate_dynrelocs): Don't make a symbol dynamic diff --git a/bfd/elfnn-riscv.c b/bfd/elfnn-riscv.c index 455f2ff292..6d297cea7d 100644 --- a/bfd/elfnn-riscv.c +++ b/bfd/elfnn-riscv.c @@ -965,7 +965,12 @@ riscv_elf_adjust_dynamic_symbol (struct bfd_link_info *info, 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.bss section we are going to use. */ - if ((h->root.u.def.section->flags & SEC_READONLY) != 0) + if (eh->tls_type & ~GOT_NORMAL) + { + s = htab->sdyntdata; + srel = htab->elf.srelbss; + } + else if ((h->root.u.def.section->flags & SEC_READONLY) != 0) { s = htab->elf.sdynrelro; srel = htab->elf.sreldynrelro; @@ -981,9 +986,6 @@ riscv_elf_adjust_dynamic_symbol (struct bfd_link_info *info, h->needs_copy = 1; } - if (eh->tls_type & ~GOT_NORMAL) - return _bfd_elf_adjust_dynamic_copy (info, h, htab->sdyntdata); - return _bfd_elf_adjust_dynamic_copy (info, h, s); }