From 9e933a5ec5af554b71effa38460c30fe3cb2355e Mon Sep 17 00:00:00 2001 From: Bananymous Date: Mon, 14 Nov 2022 18:53:00 +0200 Subject: [PATCH] Add kernel panic function --- kernel/Makefile | 1 + kernel/include/kernel/panic.h | 9 +++++++++ kernel/kernel/panic.cpp | 16 ++++++++++++++++ libc/stdlib/abort.cpp | 7 +++++-- 4 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 kernel/include/kernel/panic.h create mode 100644 kernel/kernel/panic.cpp diff --git a/kernel/Makefile b/kernel/Makefile index b45fd5a6..81aeb0c4 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -30,6 +30,7 @@ LIBS:=$(LIBS) $(KERNEL_ARCH_LIBS) KERNEL_OBJS=\ $(KERNEL_ARCH_OBJS) \ kernel/kernel.o \ +kernel/panic.o \ kernel/ssp.o \ OBJS=\ diff --git a/kernel/include/kernel/panic.h b/kernel/include/kernel/panic.h new file mode 100644 index 00000000..f461ffea --- /dev/null +++ b/kernel/include/kernel/panic.h @@ -0,0 +1,9 @@ +#pragma once + +namespace Kernel +{ + + __attribute__((__noreturn__)) + void panic(const char* message); + +} \ No newline at end of file diff --git a/kernel/kernel/panic.cpp b/kernel/kernel/panic.cpp new file mode 100644 index 00000000..52d9635f --- /dev/null +++ b/kernel/kernel/panic.cpp @@ -0,0 +1,16 @@ +#include +#include + +namespace Kernel +{ + + __attribute__((__noreturn__)) + void panic(const char* message) + { + terminal_writestring("Kernel panic: "); + terminal_writestring(message); + asm volatile("hlt"); + __builtin_unreachable(); + } + +} diff --git a/libc/stdlib/abort.cpp b/libc/stdlib/abort.cpp index 354132ef..72ef6d50 100644 --- a/libc/stdlib/abort.cpp +++ b/libc/stdlib/abort.cpp @@ -1,12 +1,15 @@ #include #include +#if defined(__is_libk) +#include +#endif + __attribute__((__noreturn__)) void abort(void) { #if defined(__is_libk) - printf("Kernel panic: abort()\n"); - asm volatile("hlt"); + Kernel::panic("abort()"); #else printf("abort()\n"); #endif