NetBSD/libexec/ld.elf_so
thorpej 5c5817ee4a When allocating the entire address space of an object, map an anonymous
region first (using the data/bss protection) covering it, then overlay
the text and data regions at the appropriate offsets within the region,
and then unmap any gap between the text and data.

The previous method of maping the entire address space with the actual
file object itself is incorrect, as it may extend past the end of the
file if the section alignment is large enough.

This bug was the source of the libposix failure on the SPARC and another
similar failure (with libc!) on the Alpha (failure was accompanied by
a "uvn_io: size check fired" message on the console).
1999-08-06 22:33:49 +00:00
..
arch We need to compile with -DVARPSZ, because the sparc has a variable page 1999-06-22 16:28:22 +00:00
Makefile Protect certain definitions from view by crt0, by wrapping them in 1999-07-05 17:55:34 +00:00
README Update for m68k. 1999-05-31 14:52:11 +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
malloc.c MAP_COPY -> MAP_PRIVATE 1999-06-17 21:09:47 +00:00
map_object.c When allocating the entire address space of an object, map an anonymous 1999-08-06 22:33:49 +00:00
paths.c KNF 1999-03-01 16:40:07 +00:00
reloc.c Add m68k code. 1999-04-29 15:06:41 +00:00
rtld.c Rearrange the shared library search path precedences to LD_LIBRARY_PATH > 1999-08-01 19:47:07 +00:00
rtld.h Rearrange the shared library search path precedences to LD_LIBRARY_PATH > 1999-08-01 19:47:07 +00:00
rtldenv.h KNF 1999-03-01 16:40:07 +00:00
search.c Rearrange the shared library search path precedences to LD_LIBRARY_PATH > 1999-08-01 19:47: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

README

$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