From: H.J. Lu Date: Tue, 14 Jan 2014 18:48:39 +0000 (-0800) Subject: Don't update reloc count if there are any non pc-relative relocs X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d1ec1e40b5b457c92aaa23f7af40e026e4596a99;p=binutils-gdb.git Don't update reloc count if there are any non pc-relative relocs PR ld/16428 * elf32-i386.c (elf_i386_allocate_dynrelocs): Don't update reloc count if there are any non pc-relative relocs. * elf64-x86-64.c (elf_x86_64_allocate_dynrelocs): Likewise. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index a8f1f9477f2..7a49fd1685c 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2014-01-14 H.J. Lu + + PR ld/16428 + * elf32-i386.c (elf_i386_allocate_dynrelocs): Don't update reloc + count if there are any non pc-relative relocs. + * elf64-x86-64.c (elf_x86_64_allocate_dynrelocs): Likewise. + 2014-01-14 Michael Hudson-Doyle Kugan Vivekanandarajah diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index 4d391e13c7d..d7f59e5e254 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -2368,8 +2368,13 @@ elf_i386_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf) for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) { - p->count -= p->pc_count; - p->pc_count = 0; + /* Don't update reloc count if there are any non + pc-relative relocs. */ + if (!h->pointer_equality_needed) + { + p->count -= p->pc_count; + p->pc_count = 0; + } if (p->count == 0) *pp = p->next; else diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index edee8ecefd5..999011bf591 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -2463,8 +2463,13 @@ elf_x86_64_allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf) for (pp = &eh->dyn_relocs; (p = *pp) != NULL; ) { - p->count -= p->pc_count; - p->pc_count = 0; + /* Don't update reloc count if there are any non + pc-relative relocs. */ + if (!h->pointer_equality_needed) + { + p->count -= p->pc_count; + p->pc_count = 0; + } if (p->count == 0) *pp = p->next; else