adadf5ecc7
especially important if the assembler syntax is different. |
||
---|---|---|
.. | ||
arch | ||
debug.c | ||
debug.h | ||
headers.c | ||
load.c | ||
Makefile | ||
malloc.c | ||
map_object.c | ||
paths.c | ||
README | ||
reloc.c | ||
rtld.c | ||
rtld.h | ||
rtldenv.h | ||
search.c | ||
symbol.c | ||
sysident.h | ||
xmalloc.c | ||
xprintf.c |
$NetBSD: README,v 1.4 1999/03/01 16:33:21 christos 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). sparc, i386: (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