468f82b316
Implemented symbol memorizing to reduce the number of calls to lookup(), making relocation go faster. While relocating a given shared object, the dynamic linker maintains a memorizing vector that is directly indexed by the symbol number in the relocation entry. The first time a given symbol is looked up, the memorizing vector is filled in with a pointer to the symbol table entry, and a pointer to the so_map of the shared object in which the symbol was defined. On subsequent uses of the same symbol, that information is retrieved directly from the memorizing vector, without calling lookup() again. A symbol that is referenced in a relocation entry is typically referenced in many relocation entries, so this memorizing reduces the number of calls to lookup() dramatically. The overall improvement in the speed of dynamic linking is also dramatic -- as much as a factor of three for programs that use many shared libaries. Submitted by: jdp@polstra.com "John Polstra" |
||
---|---|---|
.. | ||
i386 | ||
ldconfig | ||
ldd | ||
rtld | ||
sparc | ||
cplus-dem.c | ||
etc.c | ||
ld.1 | ||
ld.1aout | ||
ld.c | ||
ld.h | ||
lib.c | ||
Makefile | ||
PORTING | ||
rrs.c | ||
shlib.c | ||
symbol.c | ||
symseg.h | ||
TODO | ||
warnings.c | ||
xbits.c |