31 lines
887 B
C

#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) {}
}