aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2017-10-19 05:22:23 -0700
committerH.J. Lu <hjl.tools@gmail.com>2017-10-19 05:22:35 -0700
commit280958942b74f3164708700f195188c4d3446f58 (patch)
tree23b86f959d781b52563ae9a5f9f107dbc10cf72d
parent1ba1f393faac96f6ad80499d7133df23d6187b8c (diff)
tilegx: Check bfd_link_executable for TLS checkusers/hjl/check_relocs
Copied from x86, check bfd_link_executable, instead of bfd_link_pic, for TLS transition check. Not sure if it works correctly. All usages of bfd_link_pic should be audited. PR ld/22263 * elfxx-tilegx.c (tilegx_elf_tls_transition): Replace bfd_link_pic with !bfd_link_executable, !bfd_link_pic with bfd_link_executable for TLS check. (tilegx_elf_check_relocs): Likewise. (allocate_dynrelocs): Likewise. (tilegx_elf_relocate_section): Likewise.
-rw-r--r--bfd/ChangeLog10
-rw-r--r--bfd/elfxx-tilegx.c20
2 files changed, 20 insertions, 10 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 4ceb2dc7c07..959cf066530 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,6 +1,16 @@
2017-10-19 H.J. Lu <hongjiu.lu@intel.com>
PR ld/22263
+ * elfxx-tilegx.c (tilegx_elf_tls_transition): Replace
+ bfd_link_pic with !bfd_link_executable, !bfd_link_pic with
+ bfd_link_executable for TLS check.
+ (tilegx_elf_check_relocs): Likewise.
+ (allocate_dynrelocs): Likewise.
+ (tilegx_elf_relocate_section): Likewise.
+
+2017-10-19 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR ld/22263
* elf32-tilepro.c (tilepro_elf_tls_transition): Replace
bfd_link_pic with !bfd_link_executable, !bfd_link_pic with
bfd_link_executable for TLS check.
diff --git a/bfd/elfxx-tilegx.c b/bfd/elfxx-tilegx.c
index d7b04193ef9..2523813b456 100644
--- a/bfd/elfxx-tilegx.c
+++ b/bfd/elfxx-tilegx.c
@@ -1622,7 +1622,7 @@ static int
tilegx_elf_tls_transition (struct bfd_link_info *info, int r_type,
int is_local, bfd_boolean disable_le_transition)
{
- if (bfd_link_pic (info))
+ if (!bfd_link_executable (info))
return r_type;
if (is_local && !disable_le_transition)
@@ -1734,7 +1734,7 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
case R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE:
case R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE:
case R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE:
- if (bfd_link_pic (info))
+ if (!bfd_link_executable (info))
goto r_tilegx_plt32;
break;
@@ -1755,7 +1755,7 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
case R_TILEGX_IMM16_X0_HW1_LAST_TLS_IE:
case R_TILEGX_IMM16_X1_HW1_LAST_TLS_IE:
tls_type = GOT_TLS_IE;
- if (bfd_link_pic (info))
+ if (!bfd_link_executable (info))
info->flags |= DF_STATIC_TLS;
goto have_got_reference;
@@ -1837,7 +1837,7 @@ tilegx_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
break;
case R_TILEGX_TLS_GD_CALL:
- if (bfd_link_pic (info))
+ if (!bfd_link_executable (info))
{
/* These are basically R_TILEGX_JUMPOFF_X1_PLT relocs
against __tls_get_addr. */
@@ -2348,7 +2348,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
requiring no TLS entry. */
if (h->got.refcount > 0
&& !htab->disable_le_transition
- && !bfd_link_pic (info)
+ && bfd_link_executable (info)
&& h->dynindx == -1
&& tilegx_elf_hash_entry(h)->tls_type == GOT_TLS_IE)
h->got.offset = (bfd_vma) -1;
@@ -3060,9 +3060,9 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
else if (h != NULL)
tls_type = tilegx_elf_hash_entry(h)->tls_type;
- is_tls_iele = (! bfd_link_pic (info) || tls_type == GOT_TLS_IE);
+ is_tls_iele = (bfd_link_executable (info) || tls_type == GOT_TLS_IE);
is_tls_le = is_tls_iele && (!input_section->sec_flg0
- && !bfd_link_pic (info)
+ && bfd_link_executable (info)
&& (h == NULL || h->dynindx == -1));
if (r_type == R_TILEGX_TLS_GD_CALL)
@@ -3207,7 +3207,7 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
break;
case R_TILEGX_TLS_IE_LOAD:
if (!input_section->sec_flg0
- && !bfd_link_pic (info)
+ && bfd_link_executable (info)
&& (h == NULL || h->dynindx == -1))
{
/* IE -> LE */
@@ -3574,7 +3574,7 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
case R_TILEGX_IMM16_X1_HW0_LAST_TLS_LE:
case R_TILEGX_IMM16_X0_HW1_LAST_TLS_LE:
case R_TILEGX_IMM16_X1_HW1_LAST_TLS_LE:
- if (bfd_link_pic (info))
+ if (!bfd_link_executable (info))
{
Elf_Internal_Rela outrel;
bfd_boolean skip;
@@ -3626,7 +3626,7 @@ tilegx_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
else if (h != NULL)
{
tls_type = tilegx_elf_hash_entry(h)->tls_type;
- if (!bfd_link_pic (info)
+ if (bfd_link_executable (info)
&& h->dynindx == -1
&& tls_type == GOT_TLS_IE)
r_type = (!input_section->sec_flg0