From 6c21ac76696b93d913caec67bb8ebb761060718a Mon Sep 17 00:00:00 2001 From: Imbus <> Date: Tue, 2 Sep 2025 00:17:44 +0200 Subject: [PATCH] Better panic, with PANIC macro --- kern/libkern/panic.c | 20 +++++++++++++++----- kern/libkern/panic.h | 4 +++- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/kern/libkern/panic.c b/kern/libkern/panic.c index f0df22e..3671b04 100644 --- a/kern/libkern/panic.c +++ b/kern/libkern/panic.c @@ -1,8 +1,18 @@ +#include "stdbool.h" +#include +#include +#include +#include #include -volatile int panicked; -void panic(char *s) { - panicked = 1; - uart_puts(s); - while (1); +volatile int panicked = false; + +__attribute__((visibility("hidden"))) +void __panic(const char *restrict fmt, ...) { + va_list ap; + va_start(ap, fmt); + (void)mini_vpprintf(stdout_puts, NULL, fmt, ap); + va_end(ap); + panicked = true; + while (true) asm volatile("wfi"); } diff --git a/kern/libkern/panic.h b/kern/libkern/panic.h index 77cd640..53dc283 100644 --- a/kern/libkern/panic.h +++ b/kern/libkern/panic.h @@ -1,6 +1,8 @@ #ifndef KERNEL_PANIC_H #define KERNEL_PANIC_H -void panic(char *s); +#define PANIC(fmt, ...) __panic("[%s:%d %s] \n" fmt, __FILE__, __LINE__, __func__) + +void __panic(const char *restrict fmt, ...); #endif