Set DF_STATIC_TLS for PIEs

If we can dlopen an object then DF_STATIC_TLS is relevant.

	* elf32-ppc.c (ppc_elf_check_relocs): Set DF_STATIC_TLS for PIEs too.
	* elf64-ppc.c (ppc64_elf_check_relocs): Likewise.
This commit is contained in:
Alan Modra 2014-07-02 14:04:21 +09:30
parent 53a8cffa62
commit afb933145e
3 changed files with 10 additions and 6 deletions

View File

@ -1,3 +1,8 @@
2014-07-02 Alan Modra <amodra@gmail.com>
* elf32-ppc.c (ppc_elf_check_relocs): Set DF_STATIC_TLS for PIEs too.
* elf64-ppc.c (ppc64_elf_check_relocs): Likewise.
2014-07-01 Alan Modra <amodra@gmail.com>
* bfd.c (struct bfd): Reorganise for better packing. Delete

View File

@ -4017,7 +4017,7 @@ ppc_elf_check_relocs (bfd *abfd,
case R_PPC_GOT_TPREL16_LO:
case R_PPC_GOT_TPREL16_HI:
case R_PPC_GOT_TPREL16_HA:
if (!info->executable)
if (info->shared)
info->flags |= DF_STATIC_TLS;
tls_type = TLS_TLS | TLS_TPREL;
goto dogottls;
@ -4308,7 +4308,7 @@ ppc_elf_check_relocs (bfd *abfd,
case R_PPC_TPREL16_LO:
case R_PPC_TPREL16_HI:
case R_PPC_TPREL16_HA:
if (!info->executable)
if (info->shared)
info->flags |= DF_STATIC_TLS;
goto dodyn;

View File

@ -5328,7 +5328,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
case R_PPC64_GOT_TPREL16_LO_DS:
case R_PPC64_GOT_TPREL16_HI:
case R_PPC64_GOT_TPREL16_HA:
if (!info->executable)
if (info->shared)
info->flags |= DF_STATIC_TLS;
tls_type = TLS_TLS | TLS_TPREL;
goto dogottls;
@ -5558,7 +5558,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
case R_PPC64_TPREL64:
tls_type = TLS_EXPLICIT | TLS_TLS | TLS_TPREL;
if (!info->executable)
if (info->shared)
info->flags |= DF_STATIC_TLS;
goto dotlstoc;
@ -5636,8 +5636,7 @@ ppc64_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
case R_PPC64_TPREL16_HIGHESTA:
if (info->shared)
{
if (!info->executable)
info->flags |= DF_STATIC_TLS;
info->flags |= DF_STATIC_TLS;
goto dodyn;
}
break;