NetBSD/libexec/ld.elf_so
matt 23bca583f4 shut gcc up about a bogus possibly used before initialized. 2000-07-03 03:33:52 +00:00
..
arch Update to current <machine/asm.h> 2000-07-03 03:31:47 +00:00
Makefile If OBJECT_FMT is ELF and MACHINE_ARCH = vax, build ld.elf_so 2000-07-03 03:30:52 +00:00
README
debug.c
debug.h
headers.c Changes from msaitoh to fix local/global symbol confusion, and to fix weak 1999-11-07 00:21:12 +00:00
load.c don't stutter when printing error messages. 1999-12-27 15:36:36 +00:00
malloc.c
map_object.c switch back to using a file mapping for the initial mapping of a new object. 2000-02-13 04:28:09 +00:00
paths.c we now need <uvm/uvm_param.h> 2000-06-26 15:37:26 +00:00
reloc.c PowerPC: support ADDR16_LO, ADDR16_HI and ADDR16_HA relocations. 2000-05-01 11:41:08 +00:00
rtld.c Also set __mainprog_obj so .ini sections can call dlopen() 2000-06-16 19:51:05 +00:00
rtld.h Cause ld.elf_so to find the symbols for __progname and environ and set them. If we wait until crt0 gets around to doing it it's too late for any library init functions. 2000-04-15 05:41:46 +00:00
rtldenv.h
search.c Remove ELFNAME defines since they are defined in sys/exec_elf.h 1999-11-04 02:00:17 +00:00
symbol.c shut gcc up about a bogus possibly used before initialized. 2000-07-03 03:33:52 +00:00
sysident.h sweep of my licenses (userland files w/o only my copyright) for 2000-06-14 17:24:02 +00:00
xmalloc.c
xprintf.c Treat short and byte print formats as and cast to the right size. 2000-07-03 03:32:57 +00:00

README

$NetBSD: README,v 1.6 1999/08/20 21:12:47 christos 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.

* 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