#include "jove.h" #include "arch/x86_64/idt.h" #include "print.h" #include struct stackFrame { struct stackFrame *ebp; uintptr_t eip; }; void kpanic_state(ivt_state_t *state, const char *fmt, ...) { va_list ap; va_start(ap, fmt); kprintf("Kernel Panic!\n"); kvprintf(fmt, ap); kprintf("\n\nCore dump:\n"); kprintf("RAX %p | RBX %p | RCX %p | RDX %p\n", state->rax, state->rbx, state->rcx, state->rdx); kprintf("RSI %p | RDI %p | RSP %p | RBP %p\n", state->rsi, state->rdi, state->rsp, state->rbp); kprintf("R8 %p | R9 %p | R10 %p | R11 %p\n", state->r8, state->r9, state->r10, state->r11); kprintf("R12 %p | R13 %p | R14 %p | R15 %p\n", state->r12, state->r13, state->r14, state->r15); kprintf("RIP %p\n", state->rip); kprintf("\nStack trace:\n"); struct stackFrame *frame = (struct stackFrame*)state->rbp; for(size_t framei = 0; frame && framei < 64; ++framei) { kprintf("%i %p : %p\n", framei, frame, frame->eip); frame = frame->ebp; } hcf(); }