AxWin2 - Huge changes, getting to the working point
[tpg/acess2.git] / AcessNative / ld-acess_src / elf.c
index b99f190..daea044 100644 (file)
@@ -108,8 +108,8 @@ void *Elf_Load(int FD)
                        continue;\r
                if( phtab[i].VAddr < base )\r
                        base = phtab[i].VAddr;\r
-               if( phtab[i].VAddr > max )\r
-                       max = phtab[i].VAddr;\r
+               if( phtab[i].VAddr + phtab[i].MemSize > max )\r
+                       max = phtab[i].VAddr + phtab[i].MemSize;\r
        }\r
 \r
        LOG("base = %08x, max = %08x\n", base, max);\r
@@ -248,6 +248,9 @@ uintptr_t Elf_Relocate(void *Base)
 \r
        hdr->entrypoint += iBaseDiff;\r
        \r
+       hdr->misc.SymTable = 0;\r
+       hdr->misc.HashTable = 0;\r
+       \r
        // === Get Symbol table and String Table ===\r
        for( j = 0; dynamicTab[j].d_tag != DT_NULL; j++)\r
        {\r
@@ -274,6 +277,9 @@ uintptr_t Elf_Relocate(void *Base)
                        break;\r
                }\r
        }\r
+       \r
+       LOG("hdr->misc.SymTable = %x, hdr->misc.HashTable = %x",\r
+               hdr->misc.SymTable, hdr->misc.HashTable);\r
 \r
 \r
        // Alter Symbols to true base\r
@@ -486,6 +492,11 @@ int Elf_GetSymbol(void *Base, char *Name, uintptr_t *ret)
        pBuckets = PTR(hdr->misc.HashTable);\r
        symtab = PTR(hdr->misc.SymTable);\r
        \r
+//     LOG("Base = %p : pBuckets = %p, symtab = %p\n", Base, pBuckets, symtab);\r
+       \r
+       if(!pBuckets || !symtab)\r
+               return 0;\r
+       \r
        nbuckets = pBuckets[0];\r
        iSymCount = pBuckets[1];\r
        pBuckets = &pBuckets[2];\r

UCC git Repository :: git.ucc.asn.au