7cfc131b50
them, where the other may not exist, and the linker will fail for us if both don't exist. |
||
---|---|---|
.. | ||
arch | ||
debug.c | ||
debug.h | ||
headers.c | ||
ld.elf_so.1 | ||
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.8 2001/12/20 06:49:03 thorpej 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. * 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) alpha only: C code relocates the rest of the loader, excluding those RELATIVE relocations already done (via an ... iffy heuristic). arm, i386, m68k, sparc: (1) C code relocates the loader in _rtld_init() carefully so that it does not touch any globals. 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 coexistance of 32-bit and 64-bit ELF on platforms that can do that. * Support for relocating ld.elf_so on mips