diff options
author | Konstantin Belousov <kib@FreeBSD.org> | 2014-08-29 10:43:56 +0000 |
---|---|---|
committer | Konstantin Belousov <kib@FreeBSD.org> | 2014-08-29 10:43:56 +0000 |
commit | 74b0daf4f9c365ac984b732d4b2dde3b805e4e29 (patch) | |
tree | 3d89274ac7e90307459bc43b453f825a8587e9fe /libexec/rtld-elf/i386 | |
parent | ff21e856ece05246dbeb099c3b1bf632852a7aa5 (diff) | |
download | src-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.c | 4 |
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; |