From b905869a35f062a4e5072f10bec3a2ba3db0e365 Mon Sep 17 00:00:00 2001 From: Jon Santmyer Date: Wed, 30 Jul 2025 14:32:01 -0400 Subject: working userland with some invoke syscalls --- arch/x86_64/panic.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 arch/x86_64/panic.c (limited to 'arch/x86_64/panic.c') diff --git a/arch/x86_64/panic.c b/arch/x86_64/panic.c new file mode 100644 index 0000000..2e34500 --- /dev/null +++ b/arch/x86_64/panic.c @@ -0,0 +1,36 @@ +#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(); +} -- cgit v1.2.1