Subject: CVS commit: basesrc/libexec/ld.elf_so
To: None <source-changes@netbsd.org>
From: Charles M. Hannum <mycroft@netbsd.org>
List: source-changes
Date: 10/03/2002 23:35:20
Module Name: basesrc
Committed By: mycroft
Date: Thu Oct 3 20:35:20 UTC 2002
Modified Files:
basesrc/libexec/ld.elf_so: load.c rtld.c rtld.h symbol.c
Log Message:
As seen on tech-userlevel...
There are several optimizations here:
1) Objects on _rtld_list_main do not participate in the DAG structures
at all. This is okay because all symbols must be resolvable at
link/load time, and _rtld_list_main is always searched first, so
any references from those objects must necessarily be resolved to
other objects on _rtld_list_main.
(Making this work completely required setting obj->main a bit
earlier; hence the RTLD_MAIN hack.)
2) Objects on _rtld_list_main are not put on _rtld_list_global,
preventing an extra search.
3) A bit is used to keep track of whether an object is on
_rtld_list_global, so we don't have to do a silly linear search.
4) A small attempt is made to prevent objects being put on the DAG
lists multiple times (using a silly linear search).
The sum of this appears to be a ~10% (.3s) reduction in Mozilla's
startup time on my 800MHz box.
Also, make sure _rtld_objmain->path is always set, just to make the
debug output nicer.
To generate a diff of this commit:
cvs rdiff -r1.19 -r1.20 basesrc/libexec/ld.elf_so/load.c
cvs rdiff -r1.83 -r1.84 basesrc/libexec/ld.elf_so/rtld.c
cvs rdiff -r1.61 -r1.62 basesrc/libexec/ld.elf_so/rtld.h
cvs rdiff -r1.22 -r1.23 basesrc/libexec/ld.elf_so/symbol.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.