2009-03-12 H.J. Lu <hongjiu.lu@intel.com>
authorH.J. Lu <hjl.tools@gmail.com>
Thu, 12 Mar 2009 17:13:41 +0000 (17:13 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Thu, 12 Mar 2009 17:13:41 +0000 (17:13 +0000)
PR ld/9938
* elf32-i386.c (elf_i386_check_tls_transition): Use strncmp
to check ___tls_get_addr.

* elf64-x86-64.c (elf64_x86_64_check_tls_transition): Use
strncmp to check __tls_get_addr.

bfd/ChangeLog
bfd/elf32-i386.c
bfd/elf64-x86-64.c

index 3cc217a5dc6debfc80e2a652501d0469cd2d4c47..9841e5d6d58dc4cd6d73636138e3335d126cdb7c 100644 (file)
@@ -1,3 +1,12 @@
+2009-03-12  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR ld/9938
+       * elf32-i386.c (elf_i386_check_tls_transition): Use strncmp
+       to check ___tls_get_addr.
+
+       * elf64-x86-64.c (elf64_x86_64_check_tls_transition): Use
+       strncmp to check __tls_get_addr.
+
 2009-03-12  Andrew Stubbs  <ams@codesourcery.com>
 
        * dwarf2.c (read_section): Always check the offset, even when the
index 1cba8967b5f59601eb3c0c2af14171cbb80e7b25..3c56685f1330ecfe64fb30a5c0e689c1e55029ab 100644 (file)
@@ -1007,11 +1007,14 @@ elf_i386_check_tls_transition (bfd *abfd, asection *sec,
        return FALSE;
 
       h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+      /* Use strncmp to check ___tls_get_addr since ___tls_get_addr
+        may be versioned.  */
       return (h != NULL
              && h->root.root.string != NULL
              && (ELF32_R_TYPE (rel[1].r_info) == R_386_PC32
                  || ELF32_R_TYPE (rel[1].r_info) == R_386_PLT32)
-             && (strcmp (h->root.root.string, "___tls_get_addr") == 0));
+             && (strncmp (h->root.root.string, "___tls_get_addr",
+                          15) == 0));
 
     case R_386_TLS_IE:
       /* Check transition from IE access model:
index 7e8a0fd980f479eeb49b58a94dc2cfd1f17e8be2..58be143f0660cf5777c788b66d26fdaf735085ea 100644 (file)
@@ -810,11 +810,14 @@ elf64_x86_64_check_tls_transition (bfd *abfd, asection *sec,
        return FALSE;
 
       h = sym_hashes[r_symndx - symtab_hdr->sh_info];
+      /* Use strncmp to check __tls_get_addr since __tls_get_addr
+        may be versioned.  */ 
       return (h != NULL
              && h->root.root.string != NULL
              && (ELF64_R_TYPE (rel[1].r_info) == R_X86_64_PC32
                  || ELF64_R_TYPE (rel[1].r_info) == R_X86_64_PLT32)
-             && (strcmp (h->root.root.string, "__tls_get_addr") == 0));
+             && (strncmp (h->root.root.string,
+                          "__tls_get_addr", 14) == 0));
 
     case R_X86_64_GOTTPOFF:
       /* Check transition from IE access model: