NetBSD/libexec/ld.elf_so
lukem efcc9a4c9d * Add user-controlled mk.conf variables
- 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
2001-12-28 01:32:37 +00:00
..
arch Grumble. Put compiler options back into CPPFLAGS for now, since 2001-12-20 19:20:02 +00:00
Makefile * Add user-controlled mk.conf variables 2001-12-28 01:32:37 +00:00
README Update README. Still not complete. 2001-12-20 06:49:03 +00:00
debug.c KNF 1999-03-01 16:40:07 +00:00
debug.h KNF 1999-03-01 16:40:07 +00:00
headers.c Sync with <sys/exec_elf.h> rev. 1.45: ElfNN_RelA -> ElfNN_Rela. 2001-04-25 12:24:50 +00:00
ld.elf_so.1 Allow both space and colon as a separator in LD_PRELOAD. Document this and 2001-11-02 15:28:36 +00:00
load.c Allow both space and colon as a separator in LD_PRELOAD. Document this and 2001-11-02 15:28:36 +00:00
malloc.c MAP_COPY -> MAP_PRIVATE 1999-06-17 21:09:47 +00:00
map_object.c Return an error when there are too many segments rather than abort()ing. 2000-11-26 05:22:15 +00:00
paths.c Don't include <uvm/uvm_param.h>. It does not appear to be needed by anything. 2001-05-24 17:41:42 +00:00
reloc.c Small whitespace fix. 2001-12-20 06:54:25 +00:00
rtld.c Garbage-collect the OLD_GOT stuff. 2001-12-14 21:25:22 +00:00
rtld.h Add code to peek into the PLT and determine which PLT entry format 2001-12-14 00:53:06 +00:00
rtldenv.h KNF 1999-03-01 16:40:07 +00:00
search.c Adjust a comment after the Great Renaming. 2000-07-27 10:44:39 +00:00
symbol.c Fix how underfined weak symbols are treated -- before, ld.so would do nothing 2001-10-14 23:13:21 +00:00
sysident.h Don't use multi-line string literals. 2001-06-19 12:07:21 +00:00
xmalloc.c KNF 1999-03-01 16:40:07 +00:00
xprintf.c Pointers are NULL. Characters are '\0'. 2001-08-14 20:13:56 +00:00

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