From f2a655194a5ab0e322baa83ed9b18e34884b0a21 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Thu, 12 Mar 2009 17:13:41 +0000 Subject: [PATCH] 2009-03-12 H.J. Lu 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 | 9 +++++++++ bfd/elf32-i386.c | 5 ++++- bfd/elf64-x86-64.c | 5 ++++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 3cc217a5dc..9841e5d6d5 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,12 @@ +2009-03-12 H.J. Lu + + 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 * dwarf2.c (read_section): Always check the offset, even when the diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index 1cba8967b5..3c56685f13 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -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: diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index 7e8a0fd980..58be143f06 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -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: -- 2.11.0