X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=AcessNative%2Fld-acess_src%2Felf.c;h=daea0443ce732e074093b51e5f0be241cc1cace8;hb=e7d0a33cc9b8bf0005799ab2fb5151f78a255772;hp=b99f1901960bb7452c111b33d63f22ef66b77beb;hpb=7f80ab30017689efe0aaaab18abc7ceda689d859;p=tpg%2Facess2.git diff --git a/AcessNative/ld-acess_src/elf.c b/AcessNative/ld-acess_src/elf.c index b99f1901..daea0443 100644 --- a/AcessNative/ld-acess_src/elf.c +++ b/AcessNative/ld-acess_src/elf.c @@ -108,8 +108,8 @@ void *Elf_Load(int FD) continue; if( phtab[i].VAddr < base ) base = phtab[i].VAddr; - if( phtab[i].VAddr > max ) - max = phtab[i].VAddr; + if( phtab[i].VAddr + phtab[i].MemSize > max ) + max = phtab[i].VAddr + phtab[i].MemSize; } LOG("base = %08x, max = %08x\n", base, max); @@ -248,6 +248,9 @@ uintptr_t Elf_Relocate(void *Base) hdr->entrypoint += iBaseDiff; + hdr->misc.SymTable = 0; + hdr->misc.HashTable = 0; + // === Get Symbol table and String Table === for( j = 0; dynamicTab[j].d_tag != DT_NULL; j++) { @@ -274,6 +277,9 @@ uintptr_t Elf_Relocate(void *Base) break; } } + + LOG("hdr->misc.SymTable = %x, hdr->misc.HashTable = %x", + hdr->misc.SymTable, hdr->misc.HashTable); // Alter Symbols to true base @@ -486,6 +492,11 @@ int Elf_GetSymbol(void *Base, char *Name, uintptr_t *ret) pBuckets = PTR(hdr->misc.HashTable); symtab = PTR(hdr->misc.SymTable); +// LOG("Base = %p : pBuckets = %p, symtab = %p\n", Base, pBuckets, symtab); + + if(!pBuckets || !symtab) + return 0; + nbuckets = pBuckets[0]; iSymCount = pBuckets[1]; pBuckets = &pBuckets[2];