Debugging a segfault in ELF loader (when loading CLIShell)
[tpg/acess2.git] / AcessNative / ld-acess_src / elf.c
index b99f190..c01d24d 100644 (file)
@@ -2,7 +2,7 @@
  * Acess v0.1\r
  * ELF Executable Loader Code\r
  */\r
-#define DEBUG  0\r
+#define DEBUG  1\r
 #include <stdlib.h>\r
 #include <stdio.h>\r
 #include <string.h>\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,9 @@ int Elf_GetSymbol(void *Base, char *Name, uintptr_t *ret)
        pBuckets = PTR(hdr->misc.HashTable);\r
        symtab = PTR(hdr->misc.SymTable);\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