X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FLibraries%2Fld-acess.so_src%2Felf.c;h=15e84209b043ab41b6d6eb86f2ad1f767478f113;hb=3efa0bc1d46a4bcda04763a89d54a6802e717231;hp=531b32d7980e97cb3a2df11b5ffd1be84ad52263;hpb=be5123fe1f4aa66b76ce8ef589362ad21b6bbf72;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 531b32d7..15e84209 100644 --- a/Usermode/Libraries/ld-acess.so_src/elf.c +++ b/Usermode/Libraries/ld-acess.so_src/elf.c @@ -286,19 +286,19 @@ void *Elf32Relocate(void *Base, char **envp, const char *Filename) case DT_SYMTAB: DEBUGS(" elf_relocate: DYNAMIC Symbol Table 0x%x (0x%x)", dynamicTab[j].d_val, dynamicTab[j].d_val + iBaseDiff); - if(iBaseDiff != 0) dynamicTab[j].d_val += iBaseDiff; - dynsymtab = (void*)(intptr_t)dynamicTab[j].d_val; + dynsymtab = (void*)((intptr_t)dynamicTab[j].d_val + iBaseDiff); + //if(iBaseDiff != 0) dynamicTab[j].d_val += iBaseDiff; break; // --- String Table --- case DT_STRTAB: DEBUGS(" elf_relocate: DYNAMIC String Table 0x%x (0x%x)", dynamicTab[j].d_val, dynamicTab[j].d_val + iBaseDiff); - if(iBaseDiff != 0) dynamicTab[j].d_val += iBaseDiff; - dynstrtab = (void*)(intptr_t)dynamicTab[j].d_val; + dynstrtab = (void*)((intptr_t)dynamicTab[j].d_val + iBaseDiff); + //if(iBaseDiff != 0) dynamicTab[j].d_val += iBaseDiff; break; // --- Hash Table -- case DT_HASH: - if(iBaseDiff != 0) dynamicTab[j].d_val += iBaseDiff; + //if(iBaseDiff != 0) dynamicTab[j].d_val += iBaseDiff; // iSymCount = ((Elf32_Word*)(intptr_t)dynamicTab[j].d_val)[1]; break; } @@ -325,6 +325,7 @@ void *Elf32Relocate(void *Base, char **envp, const char *Filename) // --- Needed Library --- case DT_NEEDED: libPath = dynstrtab + dynamicTab[j].d_val; + DEBUGS(" dynstrtab = %p, d_val = 0x%x", dynstrtab, dynamicTab[j].d_val); DEBUGS(" Required Library '%s'", libPath); if(LoadLibrary(libPath, NULL, envp) == 0) { #if DEBUG @@ -506,14 +507,14 @@ int Elf32GetSymbol(void *Base, const char *Name, void **ret, size_t *Size) { // --- Symbol Table --- case DT_SYMTAB: - symtab = (void*)(intptr_t) dynTab[i].d_val; // Rebased in Relocate + symtab = (void*)((intptr_t)dynTab[i].d_val + iBaseDiff); // Rebased in Relocate break; case DT_STRTAB: - dynstrtab = (void*)(intptr_t) dynTab[i].d_val; + dynstrtab = (void*)((intptr_t)dynTab[i].d_val + iBaseDiff); break; // --- Hash Table -- case DT_HASH: - pBuckets = (void*)(intptr_t) dynTab[i].d_val; + pBuckets = (void*)((intptr_t)dynTab[i].d_val + iBaseDiff); break; } }