This is the mail archive of the binutils-cvs@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] tilepro: Check bfd_link_executable for TLS check


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=1ba1f393faac96f6ad80499d7133df23d6187b8c

commit 1ba1f393faac96f6ad80499d7133df23d6187b8c
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Thu Oct 19 05:20:44 2017 -0700

    tilepro: Check bfd_link_executable for TLS check
    
    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
    	* 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.
    	(tilepro_elf_check_relocs): Likewise.
    	(allocate_dynrelocs): Likewise.
    	(tilepro_elf_relocate_section): Likewise.

Diff:
---
 bfd/ChangeLog       | 12 +++++++++++-
 bfd/elf32-tilepro.c | 22 ++++++++++++----------
 2 files changed, 23 insertions(+), 11 deletions(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 303159b..4ceb2dc 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,4 +1,14 @@
-2017-10-18  H.J. Lu  <hongjiu.lu@intel.com>
+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.
+	(tilepro_elf_check_relocs): Likewise.
+	(allocate_dynrelocs): Likewise.
+	(tilepro_elf_relocate_section): Likewise.
+
+2017-10-19  H.J. Lu  <hongjiu.lu@intel.com>
 
 	PR ld/22263
 	* elfxx-sparc.c (sparc_elf_tls_transition): Replace
diff --git a/bfd/elf32-tilepro.c b/bfd/elf32-tilepro.c
index 0bdb6c4..7731318 100644
--- a/bfd/elf32-tilepro.c
+++ b/bfd/elf32-tilepro.c
@@ -1433,7 +1433,7 @@ static int
 tilepro_elf_tls_transition (struct bfd_link_info *info, int r_type,
 			    int is_local)
 {
-  if (bfd_link_pic (info))
+  if (!bfd_link_executable (info))
     return r_type;
 
   if (is_local)
@@ -1518,7 +1518,7 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
         case R_TILEPRO_IMM16_X1_TLS_LE_HI:
         case R_TILEPRO_IMM16_X0_TLS_LE_HA:
         case R_TILEPRO_IMM16_X1_TLS_LE_HA:
-	  if (bfd_link_pic (info))
+	  if (!bfd_link_executable (info))
 	    goto r_tilepro_plt32;
 	  break;
 
@@ -1543,7 +1543,7 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
         case R_TILEPRO_IMM16_X0_TLS_IE_HA:
         case R_TILEPRO_IMM16_X1_TLS_IE_HA:
           tls_type = GOT_TLS_IE;
-          if (bfd_link_pic (info))
+          if (!bfd_link_executable (info))
             info->flags |= DF_STATIC_TLS;
           goto have_got_reference;
 
@@ -1629,7 +1629,7 @@ tilepro_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
 	  break;
 
 	case R_TILEPRO_TLS_GD_CALL:
-	  if (bfd_link_pic (info))
+	  if (!bfd_link_executable (info))
 	    {
 	      /* These are basically R_TILEPRO_JOFFLONG_X1_PLT relocs
 		 against __tls_get_addr.  */
@@ -2105,7 +2105,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
   /* If a TLS_IE symbol is now local to the binary, make it a TLS_LE
      requiring no TLS entry.  */
   if (h->got.refcount > 0
-      && !bfd_link_pic (info)
+      && bfd_link_executable (info)
       && h->dynindx == -1
       && tilepro_elf_hash_entry(h)->tls_type == GOT_TLS_IE)
     h->got.offset = (bfd_vma) -1;
@@ -2786,8 +2786,8 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 	  else if (h != NULL)
 	    tls_type = tilepro_elf_hash_entry(h)->tls_type;
 
-	  is_tls_iele = (! bfd_link_pic (info) || tls_type == GOT_TLS_IE);
-	  is_tls_le = is_tls_iele && (!bfd_link_pic (info)
+	  is_tls_iele = (bfd_link_executable (info) || tls_type == GOT_TLS_IE);
+	  is_tls_le = is_tls_iele && (bfd_link_executable (info)
 				      && (h == NULL || h->dynindx == -1));
 
 	  if (r_type == R_TILEPRO_TLS_GD_CALL)
@@ -2864,7 +2864,7 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 	    }
 	  break;
 	case R_TILEPRO_TLS_IE_LOAD:
-	  if (!bfd_link_pic (info) && (h == NULL || h->dynindx == -1))
+	  if (bfd_link_executable (info) && (h == NULL || h->dynindx == -1))
 	    /* IE -> LE */
 	    tilepro_replace_insn (contents + rel->r_offset,
 				  insn_mask_X1_no_dest_no_srca,
@@ -3191,7 +3191,7 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
         case R_TILEPRO_IMM16_X1_TLS_LE_HI:
         case R_TILEPRO_IMM16_X0_TLS_LE_HA:
         case R_TILEPRO_IMM16_X1_TLS_LE_HA:
-	  if (bfd_link_pic (info))
+	  if (!bfd_link_executable (info))
 	    {
 	      Elf_Internal_Rela outrel;
 	      bfd_boolean skip;
@@ -3246,7 +3246,9 @@ tilepro_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
 	  else if (h != NULL)
 	    {
 	      tls_type = tilepro_elf_hash_entry(h)->tls_type;
-	      if (!bfd_link_pic (info) && h->dynindx == -1 && tls_type == GOT_TLS_IE)
+	      if (bfd_link_executable (info)
+		  && h->dynindx == -1
+		  && tls_type == GOT_TLS_IE)
 		r_type = tilepro_tls_translate_to_le (r_type);
 	    }
 	  if (tls_type == GOT_TLS_IE)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]