RISC-V: Fix TLS copy relocs
The dynrelro introduction wasn't implemented quite right for RISC-V, as it didn't consider TLS copy relocs. bfd/ChangeLog 2017-06-29 Andrew Waterman <andrew@sifive.com> * elfnn-riscv.c (riscv_elf_adjust_dynamic_symbol): Fix TLS copy relocs.
This commit is contained in:
parent
eb17d4137d
commit
3df5cd1394
|
@ -1,3 +1,8 @@
|
|||
2017-06-29 Andrew Waterman <andrew@sifive.com>
|
||||
|
||||
* elfnn-riscv.c (riscv_elf_adjust_dynamic_symbol): Fix TLS copy
|
||||
relocs.
|
||||
|
||||
2017-06-29 Egeyar Bagcioglu <egeyar.bagcioglu@oracle.com>
|
||||
|
||||
* elfxx-sparc.c (allocate_dynrelocs): Don't make a symbol dynamic
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue