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