mips dynamic linker support
authorRich Felker <dalias@aerifal.cx>
Sun, 5 Aug 2012 16:50:26 +0000 (12:50 -0400)
committerRich Felker <dalias@aerifal.cx>
Sun, 5 Aug 2012 16:50:26 +0000 (12:50 -0400)
commitbabf820180368f00742ec65b2050a82380d7c542
tree54cd3b26abca846f4f535abe3e90d293e4b3e9de
parentd04378016bfc993d8727215d79567a1c52904ade
mips dynamic linker support

not heavily tested, but the basics are working. the basic concept is
that the dynamic linker entry point code invokes a pure-PIC (no global
accesses) C function in reloc.h to perform the early GOT relocations
needed to make the dynamic linker itself functional, then invokes
__dynlink like on other archs. since mips uses some ugly arch-specific
hacks to optimize relocating the GOT (rather than just using the
normal DT_REL[A] tables like on other archs), the dynamic linker has
been modified slightly to support calling arch-specific relocation
code in reloc.h.

most of the actual mips-specific behavior was developed by reading the
output of readelf on libc.so and simple executable files. i could not
find good reference information on which relocation types need to be
supported or their semantics, so it's possible that some legitimate
usage cases will not work yet.
arch/mips/reloc.h
src/ldso/dynlink.c
src/ldso/mips/start.s [new file with mode: 0644]