* ELF Executable Loader Code\r
*/\r
#define DEBUG 0\r
-#include <common.h>\r
+#include <acess.h>\r
#include <binary.h>\r
#include "elf.h"\r
\r
LOG("iPageCount = %i", iPageCount);\r
\r
// Allocate Information Structure\r
- ret = malloc( sizeof(tBinary) + 3*sizeof(Uint)*iPageCount );\r
+ ret = malloc( sizeof(tBinary) + sizeof(tBinaryPage)*iPageCount );\r
// Fill Info Struct\r
ret->Entry = hdr.entrypoint;\r
ret->Base = -1; // Set Base to maximum value\r
if(phtab[i].Type != PT_LOAD) continue;\r
\r
// Find Base\r
- if(phtab[i].VAddr < ret->Base) ret->Base = phtab[i].VAddr;
-\r
- k = 0;\r
+ if(phtab[i].VAddr < ret->Base) ret->Base = phtab[i].VAddr;\r
\r
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
// Get Pages\r
count = ( (phtab[i].VAddr&0xFFF) + phtab[i].FileSize + 0xFFF) >> 12;\r
- for(;k<count;k++)\r
+ for( k = 0; k < count; k ++ )\r
{\r
ret->Pages[j+k].Virtual = phtab[i].VAddr + (k<<12);\r
ret->Pages[j+k].Physical = phtab[i].Offset + (k<<12); // Store the offset in the physical address\r
if( !Elf_GetSymbol((void*)base, sSymName, &val) ) // Search this binary first\r
if( !Binary_GetSymbol( sSymName, &val ) )\r
return 0;\r
- //LOG("R_386_32 *0x%x += 0x%x('%s')", ptr, val, sSymName);\r
+ LOG("R_386_32 *0x%x += 0x%x('%s')", ptr, val, sSymName);\r
*ptr = val + addend;\r
break;\r
\r
if( !Elf_GetSymbol( (void*)base, sSymName, &val ) )\r
if( !Binary_GetSymbol( sSymName, &val ) )\r
return 0;\r
- //LOG("R_386_PC32 *0x%x = 0x%x + 0x%x('%s') - 0x%x", ptr, *ptr, val, sSymName, (Uint)ptr );\r
+ LOG("R_386_PC32 *0x%x = 0x%x + 0x%x('%s') - 0x%x", ptr, *ptr, val, sSymName, (Uint)ptr );\r
// TODO: Check if it needs the true value of ptr or the compiled value\r
// NOTE: Testing using true value\r
*ptr = val + addend - (Uint)ptr;\r
if( !Elf_GetSymbol( (void*)base, sSymName, &val ) )\r
if( !Binary_GetSymbol( sSymName, &val ) )\r
return 0;\r
- //LOG("R_386_GLOB_DAT *0x%x = 0x%x (%s)", ptr, val, sSymName);\r
+ LOG("R_386_GLOB_DAT *0x%x = 0x%x (%s)", ptr, val, sSymName);\r
*ptr = val;\r
break;\r
\r
if( !Elf_GetSymbol( (void*)base, sSymName, &val ) )\r
if( !Binary_GetSymbol( sSymName, &val ) )\r
return 0;\r
- //LOG("R_386_JMP_SLOT *0x%x = 0x%x (%s)", ptr, val, sSymName);\r
+ LOG("R_386_JMP_SLOT *0x%x = 0x%x (%s)", ptr, val, sSymName);\r
*ptr = val;\r
break;\r
\r
// Base Address (B+A)\r
case R_386_RELATIVE:\r
- //LOG("R_386_RELATIVE *0x%x = 0x%x + 0x%x", ptr, base, addend);\r
+ LOG("R_386_RELATIVE *0x%x = 0x%x + 0x%x", ptr, base, addend);\r
*ptr = base + addend;\r
break;\r
\r
// Check Bucket\r
i = pBuckets[ iNameHash ];\r
if(symtab[i].shndx != SHN_UNDEF && strcmp(symtab[i].name, Name) == 0) {\r
- *ret = symtab[ i ].value;\r
+ if(ret) *ret = symtab[ i ].value;\r
return 1;\r
}\r
\r
{\r
i = pChains[i];\r
if(symtab[i].shndx != SHN_UNDEF && strcmp(symtab[ i ].name, Name) == 0) {\r
- *ret = symtab[ i ].value;\r
+ if(ret) *ret = symtab[ i ].value;\r
return 1;\r
}\r
}\r