X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Fld-acess.so_src%2Felf.c;h=92237eaa3d487c1995c0478e0b46225f1c7a9c8c;hb=fb3abbad5dfd71ea2b190d0b33d9c57e879fb15a;hp=bbe45d6220f1dde92c3e9aae32dad05f7a1d1655;hpb=2fcb3775f3afee7bfa9aa3cbb6aea3c6c3426e64;p=tpg%2Facess2.git diff --git a/Usermode/Libraries/ld-acess.so_src/elf.c b/Usermode/Libraries/ld-acess.so_src/elf.c index bbe45d62..92237eaa 100644 --- a/Usermode/Libraries/ld-acess.so_src/elf.c +++ b/Usermode/Libraries/ld-acess.so_src/elf.c @@ -5,7 +5,9 @@ * elf.c * - ELF32/ELF64 relocation */ -#define DEBUG 0 +#ifndef DEBUG // This code is #include'd from the kernel, so DEBUG may already be defined +# define DEBUG 0 +#endif #include "common.h" #include @@ -481,11 +483,20 @@ int Elf32GetSymbol(void *Base, const char *Name, void **ret, size_t *Size) return 0; } + // ... ok... maybe they haven't been relocated + if( (uintptr_t)symtab < (uintptr_t)Base ) + { + symtab = (void*)( (uintptr_t)symtab + iBaseDiff ); + pBuckets = (void*)( (uintptr_t)pBuckets + iBaseDiff ); + dynstrtab = (void*)( (uintptr_t)dynstrtab + iBaseDiff ); + SysDebug("Executable not yet relocated"); + } + nbuckets = pBuckets[0]; // iSymCount = pBuckets[1]; pBuckets = &pBuckets[2]; pChains = &pBuckets[ nbuckets ]; - + // Get hash iNameHash = ElfHashString(Name); iNameHash %= nbuckets;