NetBSD/libexec/ld.elf_so/README

64 lines
2.3 KiB
Plaintext

$NetBSD: README,v 1.3 1999/01/11 11:05:29 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:
(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).
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.
* R_*_COPY relocations don't really work. On the i386 at least:
call printf, generates an R_I386_COPY relocation and the
linker generates a direct call to the bss.rel section.
The copy relocation is supposed to put a jmp to printf
there, but code is broken and does not do anything. I.e.
it does not know the size of the relocation (it is 0) or
put a jmp table there. For now we can create working binaries
with -fPIC or -fpic because they don't use R_*_COPY relocations.
* On the i386, we cannot relocated the dynamic linker from 0, because
in pic mode globals use the plt, so it makes it difficult to do things
before we relocate ourselves. Maybe half-pic will help?
TO DO:
* Support for other platforms
* Support for coexistance of 32-bit and 64-bit ELF on platforms that can
do that.
* KNF
* Possible support for ldd (standalone operation) and program loading
a la the glibc shared loader.
* Support for relocating ld.elf_so on mips