diff options
| author | Aleksa Vuckovic <aleksav013@gmail.com> | 2022-11-29 11:55:47 +0100 |
|---|---|---|
| committer | Aleksa Vuckovic <aleksav013@gmail.com> | 2022-11-29 11:57:20 +0100 |
| commit | d36487d9fd2c19b54a3b97bdf3562a17184711fe (patch) | |
| tree | 63c6d641925e7a78a9cb9ff89562c26b77b2bf3b /kernel/src/check | |
| parent | 450b9160fdcdb0b770b316caf1d72ab893bc7aa5 (diff) | |
kernel panic
Diffstat (limited to 'kernel/src/check')
| -rw-r--r-- | kernel/src/check/panic.c | 37 | ||||
| -rw-r--r-- | kernel/src/check/ssp.c | 3 | ||||
| -rw-r--r-- | kernel/src/check/ubsan.c | 5 |
3 files changed, 38 insertions, 7 deletions
diff --git a/kernel/src/check/panic.c b/kernel/src/check/panic.c index 0480633..c618c40 100644 --- a/kernel/src/check/panic.c +++ b/kernel/src/check/panic.c @@ -1,10 +1,43 @@ #include <libk/stdio.h> #include <panic.h> +#include <graphics.h> + +uint64_t panic_rsp; __attribute__((noreturn)) -void panic() +void panic(const char *s, ...) { - printf("PANIC MODE ENETERED"); + set_color(&main_fb, RED, BLACK); + printf("KERNEL PANIC\n"); +// set_color(&main_fb, WHITE, BLACK); + va_list list; + va_start(list, s); + vprintf(s, list); + va_end(list); + + printf("regs:\n"); + uint64_t i = 0; + printf("rflags: 0x%x; ", *((uint64_t*)panic_rsp + i++)); + printf("r11: 0x%x; ", *((uint64_t*)panic_rsp + i++)); + printf("r10: 0x%x; ", *((uint64_t*)panic_rsp + i++)); + printf("r9: 0x%x\n", *((uint64_t*)panic_rsp + i++)); + printf("r8: 0x%x; ", *((uint64_t*)panic_rsp + i++)); + printf("rdi: 0x%x; ", *((uint64_t*)panic_rsp + i++)); + printf("rsi: 0x%x; ", *((uint64_t*)panic_rsp + i++)); + printf("rdx: 0x%x\n", *((uint64_t*)panic_rsp + i++)); + printf("rcx: 0x%x; ", *((uint64_t*)panic_rsp + i++)); + printf("rax: 0x%x; ", *((uint64_t*)panic_rsp + i++)); + printf("exception: 0x%x; ", *((uint64_t*)panic_rsp + i++)); + printf("rip: 0x%x\n", *((uint64_t*)panic_rsp + i++)); + printf("cs: 0x%x; ", *((uint64_t*)panic_rsp + i++)); + printf("rflags: 0x%x; ", *((uint64_t*)panic_rsp + i++)); + printf("rsp: 0x%x; ", *((uint64_t*)panic_rsp + i++)); + printf("ss: 0x%x\n", *((uint64_t*)panic_rsp + i++)); + printf("1: 0x%x\n", *((uint64_t*)panic_rsp + i++)); + printf("1: 0x%x\n", *((uint64_t*)panic_rsp + i++)); + printf("1: 0x%x\n", *((uint64_t*)panic_rsp + i++)); + printf("1: 0x%x\n", *((uint64_t*)panic_rsp + i++)); + __asm__ volatile ("cli;"); for(;;) { __asm__ volatile ("hlt;"); diff --git a/kernel/src/check/ssp.c b/kernel/src/check/ssp.c index 4b9c72a..86288b1 100644 --- a/kernel/src/check/ssp.c +++ b/kernel/src/check/ssp.c @@ -9,6 +9,5 @@ uintptr_t __stack_chk_guard = STACK_CHK_GUARD; __attribute__((noreturn)) void __stack_chk_fail(void) { - printf("Stack smashing detected"); - panic(); + panic("Stack smashing detected"); } diff --git a/kernel/src/check/ubsan.c b/kernel/src/check/ubsan.c index 8a5f998..2e302bb 100644 --- a/kernel/src/check/ubsan.c +++ b/kernel/src/check/ubsan.c @@ -17,7 +17,7 @@ * Undefined behavior sanitizer runtime support. */ -#include <stdint.h> +#include <types.h> #include <libk/stdio.h> #include <libk/serial_stdio.h> #include <ubsan.h> @@ -53,10 +53,9 @@ static void ubsan_abort(const struct ubsan_source_location* location, if ( !location || !location->filename ) location = &unknown_location; - printf( + panic( "filename = %s; line = %d; column = %d; violation = %s;\n", location->filename, location->line, location->column, violation); - panic(); } #define ABORT_VARIANT(name, params, call) \ |
