X-Git-Url: https://git.saurik.com/apple/bootx.git/blobdiff_plain/04fee52ee8aaaa7cd8b91379e26320dc877075f7..8be739c0d895e71cf9b736e6590f5f549634bc31:/bootx.tproj/sl.subproj/elf.c diff --git a/bootx.tproj/sl.subproj/elf.c b/bootx.tproj/sl.subproj/elf.c index 9bdc1cf..f1881be 100644 --- a/bootx.tproj/sl.subproj/elf.c +++ b/bootx.tproj/sl.subproj/elf.c @@ -33,19 +33,24 @@ // Public Functions -long DecodeElf(void) +long ThinFatBinaryElf(void **binary, unsigned long *length) +{ + return -1; +} + +long DecodeElf(void *binary) { ElfHeaderPtr ehPtr; ProgramHeaderPtr phPtr; long cnt, paddr, offset, memsz, filesz, entry, *tmp; - ehPtr = (ElfHeaderPtr)kLoadAddr; + ehPtr = (ElfHeaderPtr)binary; if (ehPtr->signature != kElfSignature) return 0; entry = ehPtr->entry & kElfAddressMask; for (cnt = 0; cnt < ehPtr->phnum; cnt++) { - phPtr = (ProgramHeaderPtr)(kLoadAddr+ehPtr->phoff+cnt*ehPtr->phentsize); + phPtr = (ProgramHeaderPtr)((unsigned long)binary + ehPtr->phoff + cnt * ehPtr->phentsize); if (phPtr->type == kElfProgramTypeLoad) { paddr = phPtr->paddr & kElfAddressMask; @@ -55,7 +60,7 @@ long DecodeElf(void) // Get the actual entry if it is in this program. if ((entry >= paddr) && (entry < (paddr + filesz))) { - tmp = (long *)(kLoadAddr + offset + entry); + tmp = (long *)((unsigned long)binary + offset + entry); if (tmp[2] == 0) entry += tmp[0]; } @@ -69,7 +74,7 @@ long DecodeElf(void) if (paddr < kImageAddr) { // Copy the Vectors out of the way. - bcopy((char *)(kLoadAddr + offset), gVectorSaveAddr, + bcopy((char *)((unsigned long)binary + offset), gVectorSaveAddr, kVectorSize - paddr); offset += kImageAddr - paddr; @@ -78,7 +83,7 @@ long DecodeElf(void) } // Move the program. - bcopy((char *)(kLoadAddr + offset), (char *)paddr, filesz); + bcopy((char *)((unsigned long)binary + offset), (char *)paddr, filesz); } }