diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2017-10-10 15:52:39 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2017-10-10 15:52:39 -0700 |
commit | 0f09b4d8d8f7c5d249c8375c5c42d4eba3bdc858 (patch) | |
tree | 9bca357bd0597b03ae9aef012325061e696dba8c /bfd/elf32-i386.c | |
parent | 2f20e312aad64c0f5257b9725fa5ffa3e8a93ca2 (diff) | |
download | binutils-gdb-0f09b4d8d8f7c5d249c8375c5c42d4eba3bdc858.tar.gz |
x86: Set GOT refcount to 1
Since x86 check_relocs is called after opening all inputs and garbage
collection, they never see the removed sections. There is no need
for incrementing GOT refcount. But since PLT refcount is also used in
/* Don't create the PLT entry if there are only function pointer
relocations which can be resolved at run-time. */
else if (htab->elf.dynamic_sections_created
&& (h->plt.refcount > eh->func_pointer_refcount
|| eh->plt_got.refcount > 0))
{
we must increment it.
* elf32-i386.c (elf_i386_check_relocs): Set GOT refcount to 1
instead of incrementing it.
* elf64-x86-64.c (elf_x86_64_check_relocs): Likewise.
Diffstat (limited to 'bfd/elf32-i386.c')
-rw-r--r-- | bfd/elf32-i386.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index f752de6063b..ade1e7d9cec 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -1603,7 +1603,7 @@ elf_i386_check_relocs (bfd *abfd, switch (r_type) { case R_386_TLS_LDM: - htab->tls_ld_or_ldm_got.refcount += 1; + htab->tls_ld_or_ldm_got.refcount = 1; goto create_got; case R_386_PLT32: @@ -1670,7 +1670,7 @@ elf_i386_check_relocs (bfd *abfd, if (h != NULL) { - h->got.refcount += 1; + h->got.refcount = 1; old_tls_type = elf_x86_hash_entry (h)->tls_type; } else @@ -1696,7 +1696,7 @@ elf_i386_check_relocs (bfd *abfd, elf_x86_local_got_tls_type (abfd) = (char *) (local_got_refcounts + 2 * symtab_hdr->sh_info); } - local_got_refcounts[r_symndx] += 1; + local_got_refcounts[r_symndx] = 1; old_tls_type = elf_x86_local_got_tls_type (abfd) [r_symndx]; } |