aboutsummaryrefslogtreecommitdiff
path: root/libexec/rtld-elf/i386
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2014-08-29 10:43:56 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2014-08-29 10:43:56 +0000
commit74b0daf4f9c365ac984b732d4b2dde3b805e4e29 (patch)
tree3d89274ac7e90307459bc43b453f825a8587e9fe /libexec/rtld-elf/i386
parentff21e856ece05246dbeb099c3b1bf632852a7aa5 (diff)
downloadsrc-74b0daf4f9c365ac984b732d4b2dde3b805e4e29.tar.gz
src-74b0daf4f9c365ac984b732d4b2dde3b805e4e29.zip
Optimize r270798, only do the second pass over non-plt relocations
when the first pass found IFUNCs. Sponsored by: The FreeBSD Foundation MFC after: 2 weeks
Notes
Notes: svn path=/head/; revision=270802
Diffstat (limited to 'libexec/rtld-elf/i386')
-rw-r--r--libexec/rtld-elf/i386/reloc.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/libexec/rtld-elf/i386/reloc.c b/libexec/rtld-elf/i386/reloc.c
index c2bb24663c33..c1e0a397d000 100644
--- a/libexec/rtld-elf/i386/reloc.c
+++ b/libexec/rtld-elf/i386/reloc.c
@@ -161,8 +161,10 @@ reloc_non_plt(Obj_Entry *obj, Obj_Entry *obj_rtld, int flags,
case R_386_32:
case R_386_PC32:
case R_386_GLOB_DAT:
- if ((flags & SYMLOOK_IFUNC) == 0)
+ if ((flags & SYMLOOK_IFUNC) == 0) {
+ obj->non_plt_gnu_ifunc = true;
continue;
+ }
symval = (Elf_Addr)rtld_resolve_ifunc(
defobj, def);
break;