aboutsummaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2013-02-07 02:15:30 +0000
committerH.J. Lu <hjl.tools@gmail.com>2013-02-07 02:15:30 +0000
commit20e52bd2b8041df10920960f5882636d420ebb13 (patch)
tree2439fb32d91d14e6653079491a1f4dd4332ff8a4 /bfd
parent5605a9468ae3ac8763f23b1fbb3a9e3c7c9a5155 (diff)
downloadgdb-20e52bd2b8041df10920960f5882636d420ebb13.zip
gdb-20e52bd2b8041df10920960f5882636d420ebb13.tar.gz
gdb-20e52bd2b8041df10920960f5882636d420ebb13.tar.bz2
Don't resolve size relocation against non-zero TLS symbol
bfd/ * elf32-i386.c (elf_i386_allocate_dynrelocs): Don't clear pc_count for non-zero TLS symbol. (elf_i386_relocate_section): Don't resolve size relocation against non-zero TLS symbol. * elf64-x86-64.c (elf_x86_64_allocate_dynrelocs): Don't clear pc_count for non-zero TLS symbol. (elf_x86_64_relocate_section): Don't resolve size relocation against non-zero TLS symbol. ld/testsuite/ * ld-size/size-10.rd: Updated. * ld-size/size-8.rd: Likewise. * ld-size/size32-2-i386.d: Likewise. * ld-size/size32-2-x32.d: Likewise. * ld-size/size32-2-x86-64.d: Likewise. * ld-size/size64-2-x32.d: Likewise. * ld-size/size64-2-x86-64.d: Likewise. * ld-size/size.exp (run_time_tests): Pass --hash-styl=gnu to linker for size-8 test.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog13
-rw-r--r--bfd/elf32-i386.c24
-rw-r--r--bfd/elf64-x86-64.c24
3 files changed, 12 insertions, 49 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 7565d92..50ed06f 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,16 @@
+2013-02-06 H.J. Lu <hongjiu.lu@intel.com>
+
+ * elf32-i386.c (elf_i386_allocate_dynrelocs): Don't clear pc_count
+ for non-zero TLS symbol.
+ (elf_i386_relocate_section): Don't resolve size relocation against
+ non-zero TLS symbol.
+ * elf64-x86-64.c (elf_x86_64_allocate_dynrelocs): Don't clear
+ pc_count for non-zero TLS symbol.
+ (elf_x86_64_relocate_section): Don't resolve size relocation
+ against non-zero TLS symbol.
+
2013-02-06 Sandra Loosemore <sandra@codesourcery.com>
- Andrew Jenner <andrew@codesourcery.com>
+ Andrew Jenner <andrew@codesourcery.com>
Based on patches from Altera Corporation.
diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c
index 01e50a4..f8ad1d1 100644
--- a/bfd/elf32-i386.c
+++ b/bfd/elf32-i386.c
@@ -2358,24 +2358,6 @@ elf_i386_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
if (eh->dyn_relocs == NULL)
return TRUE;
- /* Since pc_count for TLS symbol can only have size relocations and
- we always resolve size relocation against non-zero TLS symbol, we
- clear pc_count for non-zero TLS symbol. */
- if (h->type == STT_TLS && h->size != 0)
- {
- struct elf_dyn_relocs **pp;
-
- for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
- {
- p->count -= p->pc_count;
- p->pc_count = 0;
- if (p->count == 0)
- *pp = p->next;
- else
- pp = &p->next;
- }
- }
-
/* In the shared -Bsymbolic case, discard space allocated for
dynamic pc-relative relocs against symbols which turn out to be
defined in regular objects. For the normal shared case, discard
@@ -3709,12 +3691,6 @@ elf_i386_relocate_section (bfd *output_bfd,
case R_386_SIZE32:
/* Set to symbol size. */
relocation = st_size;
- if (h && h->type == STT_TLS && st_size != 0)
- {
- /* Resolve size relocation against non-zero TLS symbol. */
- unresolved_reloc = FALSE;
- break;
- }
/* Fall through. */
case R_386_32:
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
index 71f33e2..79b6dc6 100644
--- a/bfd/elf64-x86-64.c
+++ b/bfd/elf64-x86-64.c
@@ -2400,24 +2400,6 @@ elf_x86_64_allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
if (eh->dyn_relocs == NULL)
return TRUE;
- /* Since pc_count for TLS symbol can only have size relocations and
- we always resolve size relocation against non-zero TLS symbol, we
- clear pc_count for non-zero TLS symbol. */
- if (h->type == STT_TLS && h->size != 0)
- {
- struct elf_dyn_relocs **pp;
-
- for (pp = &eh->dyn_relocs; (p = *pp) != NULL; )
- {
- p->count -= p->pc_count;
- p->pc_count = 0;
- if (p->count == 0)
- *pp = p->next;
- else
- pp = &p->next;
- }
- }
-
/* In the shared -Bsymbolic case, discard space allocated for
dynamic pc-relative relocs against symbols which turn out to be
defined in regular objects. For the normal shared case, discard
@@ -3705,12 +3687,6 @@ elf_x86_64_relocate_section (bfd *output_bfd,
case R_X86_64_SIZE64:
/* Set to symbol size. */
relocation = st_size;
- if (h && h->type == STT_TLS && st_size != 0)
- {
- /* Resolve size relocation against non-zero TLS symbol. */
- unresolved_reloc = FALSE;
- break;
- }
goto direct;
case R_X86_64_PC8: