NetBSD/libexec/ld.elf_so
thorpej 4d256c199f When dlopen()'ing a shared object without an absolute pathname, search
for it in the rpath of the main program as well as the path specified
in LD_LIBRARY_PATH.
1999-07-22 00:18:19 +00:00
..
arch We need to compile with -DVARPSZ, because the sparc has a variable page 1999-06-22 16:28:22 +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 KNF 1999-03-01 16:40:07 +00:00
load.c Implement LD_PRELOAD support. 1999-05-31 14:48:16 +00:00
Makefile Protect certain definitions from view by crt0, by wrapping them in 1999-07-05 17:55:34 +00:00
malloc.c MAP_COPY -> MAP_PRIVATE 1999-06-17 21:09:47 +00:00
map_object.c KNF 1999-03-01 16:40:07 +00:00
paths.c KNF 1999-03-01 16:40:07 +00:00
README Update for m68k. 1999-05-31 14:52:11 +00:00
reloc.c Add m68k code. 1999-04-29 15:06:41 +00:00
rtld.c When dlopen()'ing a shared object without an absolute pathname, search 1999-07-22 00:18:19 +00:00
rtld.h Protect certain definitions from view by crt0, by wrapping them in 1999-07-05 17:55:34 +00:00
rtldenv.h KNF 1999-03-01 16:40:07 +00:00
search.c KNF 1999-03-01 16:40:07 +00:00
symbol.c KNF 1999-03-01 16:40:07 +00:00
sysident.h At least make the comments accurate. 1998-09-13 05:53:34 +00:00
xmalloc.c KNF 1999-03-01 16:40:07 +00:00
xprintf.c Make this compile without -DRTLD_LOADER and fix printf format problems on 1999-03-03 21:18:00 +00:00

$NetBSD: README,v 1.5 1999/05/31 14:52:11 kleink Exp $

BUGS/PROBLEMS:

* rtld.c around line 147:

	#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.

* Formerly, _DYNAMIC was _GLOBAL_OFFSET_TABLE_[0], but that isn't true with
  newer snapshots of gas/binutils (at least on the Alpha), which support
  multiple GOTs.  That's what the OLD_GOT #ifdefs are about.
  
* 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) C code relocates the rest of the loader, excluding those
	    RELATIVE relocations already done (via an ... iffy heuristic).

  i386, m68k, sparc:
	(1) C code relocates RELATIVE relocations in _rtld_init() carefully
	    so that it does not touch any globals.

	(2) C code relocates the rest of the loader, excluding those
	    RELATIVE relocations already done (via an ... iffy heuristic).

  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 other platforms

* Support for coexistance of 32-bit and 64-bit ELF on platforms that can
  do that.

* Possible support for ldd (standalone operation) and program loading
  a la the glibc shared loader.

* Support for relocating ld.elf_so on mips