efcc9a4c9d
- SHLIBDIR Location to install shared libraries if ${USE_SHLIBDIR} is "yes". Defaults to "/usr/lib". - USE_SHLIBDIR If "yes", install shared libraries in ${SHLIBDIR} instead of ${LIBDIR}. Defaults to "no". Sets ${_LIBSODIR} to the appropriate value. This may be set by individual Makefiles as well. - SHLINKDIR Location of shared linker. Defaults to "/usr/libexec". If != "/usr/libexec", change the dynamic-linker encoded in shared programs * Set USE_SHLIBDIR for libraries used by /bin and /sbin: libc libcrypt libcrypto libedit libipsec libkvm libm libmi387 libtermcap libutil libz * If ${_LIBSODIR} != ${LIBDIR}, add symlinks from ${LIBDIR}/${LIB}.so* to ${_LIBSODIR}/${LIB}.so* for compatibility. * Always install /sbin/init statically (for now) The net effect of these changes depends on how the variables are set: 1.) If nothing is set or changed, there is no change from the current behaviour: - Static /bin, /sbin, and bits of /usr/* - Dynamic rest - Shared linker is /usr/libexec/ld*so 2.) If the following make variables are set: LDSTATIC= SHLINKDIR=/lib SHLIBDIR=/lib Then the behaviour becomes: - Dynamic tools - .so libraries used by /bin and /sbin are installed to /lib, with symlinks from /usr/lib/lib*so to -> /lib/lib*so where appropriate - Shared linker is /lib/ld*so 3.) As per 2.), but add the following variable: USE_SHLIBDIR=yes This forces all .so's to be instaleld in /lib (with compat symlinks), not just those tagged by their Makefiles to be. Again, compat symlinks are installed |
||
---|---|---|
.. | ||
arch | ||
Makefile | ||
README | ||
debug.c | ||
debug.h | ||
headers.c | ||
ld.elf_so.1 | ||
load.c | ||
malloc.c | ||
map_object.c | ||
paths.c | ||
reloc.c | ||
rtld.c | ||
rtld.h | ||
rtldenv.h | ||
search.c | ||
symbol.c | ||
sysident.h | ||
xmalloc.c | ||
xprintf.c |
README
$NetBSD: README,v 1.8 2001/12/20 06:49:03 thorpej Exp $ BUGS/PROBLEMS: * rtld.c around line 184: #iffdef __alpha__ /* XXX XXX XXX */ _rtld_objself.pltgot = NULL; #endif It's a workaround for a linker bug, and will go away when the linker is fixed. * The method used to relocate ld.so is shoddy and fragile. Currently it's something like: alpha, powerpc: (1) assembly code relocates RELATIVE relocations in the GOT (on some ports, all relative relocations; this will probably have to be #ifdef'd in reloc.c), assuming that everything in the GOT is a RELATIVE relocation. (2) alpha only: C code relocates the rest of the loader, excluding those RELATIVE relocations already done (via an ... iffy heuristic). arm, i386, m68k, sparc: (1) C code relocates the loader in _rtld_init() carefully so that it does not touch any globals. mips: (1) loads ld.elf_so at 0, so no relocating is necessary. Something better (like that the glibc ELF ld.so does) should be done eventually, where a single set of C code is compiled twice, once for normal use, and once to be used to relocate the shared linker. No relocations should be processed in assembly language. * On the Alpha, this code Really needs to be checked to be sure that it doesn't make calls that could use FP, while doing lazy binding. TO DO: * Support for coexistance of 32-bit and 64-bit ELF on platforms that can do that. * Support for relocating ld.elf_so on mips