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.