Date: Thu, 24 Jun 1999 19:54:00 -0700 (PDT) From: John Polstra <jdp@FreeBSD.org> To: cvs-committers@FreeBSD.org, cvs-all@FreeBSD.org Subject: cvs commit: src/libexec/rtld-elf rtld.c src/libexec/rtld-elf/alpha reloc.c rtld_machdep.h src/libexec/rtld-elf/i386 reloc.c rtld_machdep.h Message-ID: <199906250254.TAA94521@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
jdp 1999/06/24 19:54:00 PDT
Modified files:
libexec/rtld-elf rtld.c
libexec/rtld-elf/alpha reloc.c rtld_machdep.h
libexec/rtld-elf/i386 reloc.c rtld_machdep.h
Log:
Fix a serious performance bug for large programs on the Alpha,
discovered by Hidetoshi Shimokawa. Large programs need multiple
GOTs. The lazy binding stub in the PLT can be reached from any of
these GOTs, but the dynamic linker only has enough information to
fix up the first GOT entry. Thus calls through the other GOTs went
through the time-consuming lazy binding process on every call.
This fix rewrites the PLT entries themselves to bypass the lazy
binding.
Tested by Hidetoshi Shimokawa and Steve Price.
Reviewed by: Doug Rabson <dfr@freebsd.org>
Revision Changes Path
1.24 +7 -7 src/libexec/rtld-elf/rtld.c
1.5 +161 -43 src/libexec/rtld-elf/alpha/reloc.c
1.2 +3 -1 src/libexec/rtld-elf/alpha/rtld_machdep.h
1.3 +23 -27 src/libexec/rtld-elf/i386/reloc.c
1.2 +9 -1 src/libexec/rtld-elf/i386/rtld_machdep.h
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199906250254.TAA94521>
