Re: Apples linking

From: Peter Jeremy <peterjeremy_at_optushome.com.au>
Date: Fri, 28 Nov 2003 18:59:11 +1100
On Thu, Nov 27, 2003 at 11:24:23AM -0500, Robert Watson wrote:
[Darwin pre-binding]
>presumably applies to other processor architectures.  The one thing that
>turns me off to this scheme is that I'd like it if we could find a way to
>represent this using solely existing BSD/UNIX kernel primitives (mmap, et
>al) and userspace, rather than adding special-purpose system calls that
>complicated various code paths, and that aren't portable.

Compaq/HP Tru64 supports link-time pre-binding, called "Quickstart".
To use it, shared libraries are linked to load at mutually exclusive
addresses and applications are linked assuming the preferred .so load
addresses.  At run-time, the rtld verifies that it can map every
shared library at its preferred address and that each shared library
is the same one the application was linked against (using checksums in
the COFF headers).  If all this is true, all the relocations are
correct and execution starts immediately.  If any checks fail, rtld
falls back to the traditional check-every-symbol-and-relocation
approach.

The benefit is very fast start times - not much more overhead than
starting a static executable.

The disadvantages are:
- if any library changes, all dependent applications must be relinked to
  maintain the fast start.  In some cases a utility can be used to
  re-validate the checksums in the application if the library hasn't
  grown and is at the same address.
- circular shared library dependencies aren't allowed
- a writable common list of .so load addresses is needed at .so link time.
- having reserved address space for each shared library results in a
  fragmented process address space and may impact on the space available
  to the application.

For more details see the following links
http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_HTML/ARH9VDTE/SHLBCHPX.HTM#using-quickstart
http://h30097.www3.hp.com/docs/base_doc/DOCUMENTATION/V51B_HTML/SUPPDOCS/OBJSPEC/NV140XXX.HTM#nav14-54

I don't believe it is feasible to do much about the i386 PIC overheads
other than moving to a saner processor architecture.  What other
techniques are used to improve shared library startup times in other
operating systems?

Peter
Received on Thu Nov 27 2003 - 22:59:20 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:37:31 UTC