$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