summaryrefslogtreecommitdiff
path: root/kernel/src/check
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/src/check')
-rw-r--r--kernel/src/check/panic.c37
-rw-r--r--kernel/src/check/ssp.c3
-rw-r--r--kernel/src/check/ubsan.c5
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) \