diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2011-09-12 18:17:36 +0000 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2011-09-12 18:17:36 +0000 |
commit | 7b5b197e80f04c9b95fe7fafbd9907fc61a1e43d (patch) | |
tree | 791abbcc8c62e9409df35f0b5e03ee53435a30af /bfd/elf-ifunc.c | |
parent | 24ece742a04f8f109c26229d8818b208575618b2 (diff) | |
download | binutils-7b5b197e80f04c9b95fe7fafbd9907fc61a1e43d.zip binutils-7b5b197e80f04c9b95fe7fafbd9907fc61a1e43d.tar.gz binutils-7b5b197e80f04c9b95fe7fafbd9907fc61a1e43d.tar.bz2 |
Use .got.plt for IFUNC symbols if there are no GOT relocations.
bfd/
2011-09-12 H.J. Lu <hongjiu.lu@intel.com>
PR ld/13178
* elf-ifunc.c (_bfd_elf_allocate_ifunc_dyn_relocs): Use .got.plt
if there are no GOT relocations.
ld/testsuite/
2011-09-12 H.J. Lu <hongjiu.lu@intel.com>
PR ld/13178
* ld-ifunc/ifunc-13-i386.d: Updated.
* ld-ifunc/ifunc-13-x86-64.d: Likewise.
* ld-ifunc/ifunc-3a-x86.d: Likewise.
* ld-x86-64/pr13082-5a.d: Likewise.
* ld-ifunc/ifunc-15-i386.d: New.
* ld-ifunc/ifunc-15-i386.s: Likewise.
* ld-ifunc/ifunc-15-x86-64.d: Likewise.
* ld-ifunc/ifunc-15-x86-64.s: Likewise.
Diffstat (limited to 'bfd/elf-ifunc.c')
-rw-r--r-- | bfd/elf-ifunc.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/bfd/elf-ifunc.c b/bfd/elf-ifunc.c index 81429b8..3ba96c7 100644 --- a/bfd/elf-ifunc.c +++ b/bfd/elf-ifunc.c @@ -299,9 +299,10 @@ keep: 5. Otherwise use .got so that it can be shared among different objects at run-time. We only need to relocate .got entry in shared object. */ - if ((info->shared - && (h->dynindx == -1 - || h->forced_local)) + if (h->got.refcount <= 0 + || (info->shared + && (h->dynindx == -1 + || h->forced_local)) || (!info->shared && !h->pointer_equality_needed) || (info->executable && info->shared) |