x86_64 support, requiring a slight refactor to the build system.
[tpg/acess2.git] / Kernel / bin / elf.c
index 4bc13b1..3209c04 100644 (file)
@@ -57,7 +57,12 @@ tBinary *Elf_Load(int fp)
        }\r
        \r
        // Read Program Header Table\r
-       phtab = malloc(sizeof(Elf32_Phdr)*hdr.phentcount);\r
+       phtab = malloc( sizeof(Elf32_Phdr) * hdr.phentcount );\r
+       if( !phtab ) {\r
+               LEAVE('n');\r
+               return NULL;\r
+       }\r
+       LOG("hdr.phoff = 0x%08x", hdr.phoff);\r
        VFS_Seek(fp, hdr.phoff, SEEK_SET);\r
        VFS_Read(fp, sizeof(Elf32_Phdr)*hdr.phentcount, phtab);\r
        \r
@@ -88,7 +93,17 @@ tBinary *Elf_Load(int fp)
        for( i = 0; i < hdr.phentcount; i++ )\r
        {\r
                 int    lastSize;\r
-               LOG("phtab[%i].Type = 0x%x", i, phtab[i].Type);\r
+               //LOG("phtab[%i].Type = 0x%x", i, phtab[i].Type);\r
+               LOG("phtab[%i] = {", i);\r
+               LOG(" .Type = 0x%08x", phtab[i].Type);\r
+               LOG(" .Offset = 0x%08x", phtab[i].Offset);\r
+               LOG(" .VAddr = 0x%08x", phtab[i].VAddr);\r
+               LOG(" .PAddr = 0x%08x", phtab[i].PAddr);\r
+               LOG(" .FileSize = 0x%08x", phtab[i].FileSize);\r
+               LOG(" .MemSize = 0x%08x", phtab[i].MemSize);\r
+               LOG(" .Flags = 0x%08x", phtab[i].Flags);\r
+               LOG(" .Align = 0x%08x", phtab[i].Align);\r
+               LOG(" }");\r
                // Get Interpreter Name\r
                if( phtab[i].Type == PT_INTERP )\r
                {\r
@@ -282,7 +297,7 @@ int Elf_Relocate(void *Base)
                                Warning("ELF", "Elf_Relocate - Multiple PT_DYNAMIC segments\n");\r
                                continue;\r
                        }\r
-                       dynamicTab = (void *) phtab[i].VAddr;\r
+                       dynamicTab = (void *) (tVAddr) phtab[i].VAddr;\r
                        j = i;  // Save Dynamic Table ID\r
                        break;\r
                }\r
@@ -311,20 +326,20 @@ int Elf_Relocate(void *Base)
                // --- Symbol Table ---\r
                case DT_SYMTAB:\r
                        dynamicTab[j].d_val += iBaseDiff;\r
-                       dynsymtab = (void*)(dynamicTab[j].d_val);\r
+                       dynsymtab = (void*) (tVAddr) dynamicTab[j].d_val;\r
                        hdr->misc.SymTable = dynamicTab[j].d_val;       // Saved in unused bytes of ident\r
                        break;\r
                \r
                // --- String Table ---\r
                case DT_STRTAB:\r
                        dynamicTab[j].d_val += iBaseDiff;\r
-                       dynstrtab = (void*)(dynamicTab[j].d_val);\r
+                       dynstrtab = (void*) (tVAddr) dynamicTab[j].d_val;\r
                        break;\r
                \r
                // --- Hash Table --\r
                case DT_HASH:\r
                        dynamicTab[j].d_val += iBaseDiff;\r
-                       iSymCount = ((Uint*)(dynamicTab[j].d_val))[1];\r
+                       iSymCount = ((Uint*)((tVAddr)dynamicTab[j].d_val))[1];\r
                        hdr->misc.HashTable = dynamicTab[j].d_val;      // Saved in unused bytes of ident\r
                        break;\r
                }\r

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