Date: Sat, 5 May 2001 16:21:05 -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 rtld.h src/libexec/rtld-elf/alpha reloc.c src/libexec/rtld-elf/i386 reloc.c Message-ID: <200105052321.f45NL5Z24754@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
jdp 2001/05/05 16:21:05 PDT
Modified files:
libexec/rtld-elf rtld.c rtld.h
libexec/rtld-elf/alpha reloc.c
libexec/rtld-elf/i386 reloc.c
Log:
Performance improvements for the ELF dynamic linker. These
particularly help programs which load many shared libraries with
a lot of relocations. Large C++ programs such as are found in KDE
are a prime example.
While relocating a shared object, maintain a vector of symbols
which have already been looked up, directly indexed by symbol
number. Typically, symbols which are referenced by a relocation
entry are referenced by many of them. This is the same optimization
I made to the a.out dynamic linker in 1995 (rtld.c revision 1.30).
Also, compare the first character of a sought-after symbol with its
symbol table entry before calling strcmp().
On a PII/400 these changes reduce the start-up time of a typical
KDE program from 833 msec (elapsed) to 370 msec.
MFC after: 5 days
Revision Changes Path
1.52 +22 -6 src/libexec/rtld-elf/rtld.c
1.22 +11 -2 src/libexec/rtld-elf/rtld.h
1.12 +12 -5 src/libexec/rtld-elf/alpha/reloc.c
1.7 +10 -5 src/libexec/rtld-elf/i386/reloc.c
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?200105052321.f45NL5Z24754>
