Using GCC/GAS Xenix on AT&T Unix V/386.3.2 (shared libraries0

Geoff Steckel - Sun BOS Software gsteckel at diag2.East.Sun.COM
Tue May 1 06:51:42 AEST 1990


>>Maybe I am as well.  My understanding is that the linker has to link up the
>>code in such a way that it can be swapped or demand paged.

Not quite, but close.  The choice is between an executable with all its
code, including the library routines, in the file, or an executable which
attaches to a shared library at run time.  In both cases the OS pages, swaps,
or whatver it feels like.

The motivation is that sharing one copy of the standard libraries takes much
less space in memory and on disk than separate library pieces in each program.
The cost is some extra setup.

The linker must either link in the correct library
routines, or a set of stubs which correspond to the `well known' entry points
in the shared library segment.  I don't know exactly how SysV/386 handles
this, but the stubs are either just absolute addresses or jumps to absolute
addresses (perhaps via indirection, like through a table).

At run time (again I don't know exactly how SysV/386 works, but some wizard
can enlighten us) one of three things happens:
  1) The executable is marked `uses shared library' and the OS automatically
     maps it in.
  2) Part of the standard startup (like /lib/crt0.o) contains a system call
     to map in the appropriate library.
  3) The first call to the library page faults, but the OS recognizes the
     address range and maps in the shared library.

At a guess, #2 is what happens.  Usually a code is stored by the linker in
the executable to declare what version of the library the executable was
linked against.  Most systems check this code (either in the application or
in the OS) at process startup and exit with an error if the program is being
run with a library version older than the one which was used for linking.

Whew.  I hope this clarifies things a little.  Any more exact information
gratefully appreciated.

	geoff steckel (gwes at wjh12.harvard.EDU)
			(...!husc6!wjh12!omnivor!gws)
Disclaimer: I am not affiliated with Sun Microsystems, despite the From: line.
This posting is entirely the author's responsibility.



More information about the Comp.unix.xenix mailing list