$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