#include "../../lnxboot.h" #include "gzip.h" #include "elf.h" extern void* _CC_cckernel; extern void* _CC_ecckernel; /// C entry point for cckernel [[noreturn]] void ccmain(void* imgbase, struct boot_params* boot_params) { struct setup_info* setup_info = (struct setup_info*)((void*)boot_params + 0x1f1); char* kernel_load_addr = (char*)setup_info->code32_start; if (kernel_load_addr == 0) kernel_load_addr = (char*)0x100000; char* cckernel = imgbase + (uptr)&_CC_cckernel; //for (long i = 0; i < setup_info->payload_length; i++) { // kernel_load_addr[i] = cckernel[i]; //} // decompress the kernel uptr BinaryLength = GzipDecompress(cckernel, (u8*)&_CC_ecckernel - (u8*)&_CC_cckernel, kernel_load_addr); // start the kernel ElfExecute(kernel_load_addr, kernel_load_addr + BinaryLength + 0x1000 - BinaryLength % 0x1000, boot_params); // we fucked up while (1) {} }