forked from Imagelibrary/binutils-gdb
[PR ld/22263] aarch64: Avoid dynamic TLS relocs in PIE
No dynamic relocs are needed for TLS defined in an executable, the TP relative offset is known at link time. Fixes FAIL: Build pr22263-1 bfd/ PR ld/22263 * elfnn-aarch64.c (elfNN_aarch64_relocate_section): Use bfd_link_executable instead of bfd_link_pic for TLS. (elfNN_aarch64_allocate_dynrelocs): Likewise. (aarch64_can_relax_tls): Likewise.
This commit is contained in:
@@ -1,3 +1,11 @@
|
|||||||
|
2017-11-27 Szabolcs Nagy <szabolcs.nagy@arm.com>
|
||||||
|
|
||||||
|
PR ld/22263
|
||||||
|
* elfnn-aarch64.c (elfNN_aarch64_relocate_section): Use
|
||||||
|
bfd_link_executable instead of bfd_link_pic for TLS.
|
||||||
|
(elfNN_aarch64_allocate_dynrelocs): Likewise.
|
||||||
|
(aarch64_can_relax_tls): Likewise.
|
||||||
|
|
||||||
2017-11-27 Szabolcs Nagy <szabolcs.nagy@arm.com>
|
2017-11-27 Szabolcs Nagy <szabolcs.nagy@arm.com>
|
||||||
|
|
||||||
PR ld/22269
|
PR ld/22269
|
||||||
|
|||||||
@@ -4580,7 +4580,7 @@ aarch64_can_relax_tls (bfd *input_bfd,
|
|||||||
if (symbol_got_type == GOT_TLS_IE && GOT_TLS_GD_ANY_P (reloc_got_type))
|
if (symbol_got_type == GOT_TLS_IE && GOT_TLS_GD_ANY_P (reloc_got_type))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
if (bfd_link_pic (info))
|
if (!bfd_link_executable (info))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
if (h && h->root.type == bfd_link_hash_undefweak)
|
if (h && h->root.type == bfd_link_hash_undefweak)
|
||||||
@@ -6247,7 +6247,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
|
|||||||
indx = h && h->dynindx != -1 ? h->dynindx : 0;
|
indx = h && h->dynindx != -1 ? h->dynindx : 0;
|
||||||
|
|
||||||
need_relocs =
|
need_relocs =
|
||||||
(bfd_link_pic (info) || indx != 0) &&
|
(!bfd_link_executable (info) || indx != 0) &&
|
||||||
(h == NULL
|
(h == NULL
|
||||||
|| ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
|| ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
||||||
|| h->root.type != bfd_link_hash_undefweak);
|
|| h->root.type != bfd_link_hash_undefweak);
|
||||||
@@ -6342,7 +6342,7 @@ elfNN_aarch64_relocate_section (bfd *output_bfd,
|
|||||||
indx = h && h->dynindx != -1 ? h->dynindx : 0;
|
indx = h && h->dynindx != -1 ? h->dynindx : 0;
|
||||||
|
|
||||||
need_relocs =
|
need_relocs =
|
||||||
(bfd_link_pic (info) || indx != 0) &&
|
(!bfd_link_executable (info) || indx != 0) &&
|
||||||
(h == NULL
|
(h == NULL
|
||||||
|| ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
|| ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
||||||
|| h->root.type != bfd_link_hash_undefweak);
|
|| h->root.type != bfd_link_hash_undefweak);
|
||||||
@@ -8057,7 +8057,7 @@ elfNN_aarch64_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
|
|||||||
indx = h && h->dynindx != -1 ? h->dynindx : 0;
|
indx = h && h->dynindx != -1 ? h->dynindx : 0;
|
||||||
if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
if ((ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
|
||||||
|| h->root.type != bfd_link_hash_undefweak)
|
|| h->root.type != bfd_link_hash_undefweak)
|
||||||
&& (bfd_link_pic (info)
|
&& (!bfd_link_executable (info)
|
||||||
|| indx != 0
|
|| indx != 0
|
||||||
|| WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h)))
|
|| WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, 0, h)))
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user