From owner-cvs-all Thu Jun 24 19:54: 3 1999 Delivered-To: cvs-all@freebsd.org Received: from freefall.freebsd.org (freefall.FreeBSD.ORG [204.216.27.21]) by hub.freebsd.org (Postfix) with ESMTP id 343871555C; Thu, 24 Jun 1999 19:54:01 -0700 (PDT) (envelope-from jdp@FreeBSD.org) Received: (from jdp@localhost) by freefall.freebsd.org (8.9.3/8.9.2) id TAA94521; Thu, 24 Jun 1999 19:54:00 -0700 (PDT) (envelope-from jdp@FreeBSD.org) Message-Id: <199906250254.TAA94521@freefall.freebsd.org> From: John Polstra Date: Thu, 24 Jun 1999 19:54:00 -0700 (PDT) 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 Sender: owner-cvs-all@FreeBSD.ORG Precedence: bulk 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 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