aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2014-07-02 14:04:21 +0930
committerAlan Modra <amodra@gmail.com>2014-07-02 14:04:21 +0930
commitafb933145e2869c73c08db0995171d0d2e5b6296 (patch)
tree733ad5ab233d24c714349213e25f10c974feab72
parent53a8cffa625b1b4fdf76e2dd0f0e9fc4b1bf0ab4 (diff)
downloadgdb-afb933145e2869c73c08db0995171d0d2e5b6296.zip
gdb-afb933145e2869c73c08db0995171d0d2e5b6296.tar.gz
gdb-afb933145e2869c73c08db0995171d0d2e5b6296.tar.bz2
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.
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/elf32-ppc.c4
-rw-r--r--bfd/elf64-ppc.c7
3 files changed, 10 insertions, 6 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 44ce846..9eb3eda 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -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
diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c
index c4a9543..0a9c8f9 100644
--- a/bfd/elf32-ppc.c
+++ b/bfd/elf32-ppc.c
@@ -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;
diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c
index 267a925..81e54a7 100644
--- a/bfd/elf64-ppc.c
+++ b/bfd/elf64-ppc.c
@@ -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;