Fixing binary loader bugs relating to page sizes
[tpg/acess2.git] / Kernel / bin / elf.c
index 731d151..4bf15fa 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 <acess.h>\r
 #include <binary.h>\r
 #include "elf.h"\r
@@ -35,7 +35,7 @@ tBinary *Elf_Load(int fp)
         int    iPageCount;\r
         int    count;\r
        \r
-       ENTER("ifp", fp);\r
+       ENTER("xfp", fp);\r
        \r
        // Read ELF Header\r
        VFS_Read(fp, sizeof(hdr), &hdr);\r
@@ -126,13 +126,15 @@ tBinary *Elf_Load(int fp)
                LOG("phtab[%i] = {VAddr:0x%x,Offset:0x%x,FileSize:0x%x}",\r
                        i, phtab[i].VAddr, phtab[i].Offset, phtab[i].FileSize);\r
                \r
-               if( (phtab[i].FileSize & 0xFFF) < 0x1000 - (phtab[i].VAddr & 0xFFF) )\r
-                       lastSize = phtab[i].FileSize;\r
-               else\r
+               //if( (phtab[i].FileSize & 0xFFF) < 0x1000 - (phtab[i].VAddr & 0xFFF) )\r
+               //      lastSize = phtab[i].FileSize;\r
+               //else\r
                        lastSize = (phtab[i].FileSize & 0xFFF) + (phtab[i].VAddr & 0xFFF);\r
-               lastSize &= 0xFFF;\r
+               //lastSize &= 0xFFF;\r
+               \r
+               //LOG("lastSize = 0x%x", lastSize);\r
                \r
-               LOG("lastSize = 0x%x", lastSize);\r
+               lastSize = phtab[i].FileSize;\r
                \r
                // Get Pages\r
                count = ( (phtab[i].VAddr&0xFFF) + phtab[i].FileSize + 0xFFF) >> 12;\r
@@ -152,6 +154,7 @@ tBinary *Elf_Load(int fp)
                                ret->Pages[j+k].Size = 4096;\r
                        LOG("ret->Pages[%i].Size = 0x%x", j+k, ret->Pages[j+k].Size);\r
                        ret->Pages[j+k].Flags = 0;\r
+                       lastSize -= ret->Pages[j+k].Size;\r
                }\r
                count = (phtab[i].MemSize + 0xFFF) >> 12;\r
                for(;k<count;k++)\r

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