From 1f061145327d255a97ca0fff6960744a12b42863 Mon Sep 17 00:00:00 2001 From: Vegard Storheil Eriksen Date: Sun, 10 Jan 2010 03:31:15 +0100 Subject: Expanded kernel panic function. --- kernel/panic.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 kernel/panic.c (limited to 'kernel/panic.c') diff --git a/kernel/panic.c b/kernel/panic.c new file mode 100644 index 0000000..bdd4e93 --- /dev/null +++ b/kernel/panic.c @@ -0,0 +1,41 @@ +#include "panic.h" +#include "printf.h" + +char* panic_msg[] = { + "#DE - Divide error.", + "#DB", + "#2", + "#BP", + "#OF", + "#BR", + "#UD - Invalid opcode.", + "#NM", + "#DF - Double fault.", + "#9", + "#TS", + "#NP", + "#SS", + "#GP - General protection fault.", + "#PF - Page fault.", + "#15", + "#MF", + "#AC", + "#MC", + "#XM", + [20 ... 31] = "Undefined exception." +}; + +void panic(panic_stack_t stack) { + printf("Kernel panic: %s\n", panic_msg[stack.num]); + printf("INT: %8u EC: %08x\n", stack.num, stack.error_code); + printf(" CS: %04x DS: %04x SS: %04x\n", stack.cs, stack.ds, stack.ss); + printf("EIP: %08x EFLAGS: %08x\n", stack.eip, stack.eflags); + printf("EAX: %08x EBX: %08x ECX: %08x EDX: %08x\n", stack.eax, stack.ebx, stack.ecx, stack.edx); + printf("ESP: %08x EBP: %08x ESI: %08x EDI: %08x\n", stack.esp, stack.ebp, stack.esi, stack.edi); + + asm volatile( + "cli\n" + "hlt\n" + ); + while(1); +} -- cgit v1.2.3