From e57c64c0e96228baf69b1c43a065c1170fabd18e Mon Sep 17 00:00:00 2001 From: trimill Date: Mon, 29 Jan 2024 16:27:03 -0500 Subject: [PATCH] panic --- include/panic.h | 8 ++++++++ src/arch/amd64/panic.c | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 include/panic.h create mode 100644 src/arch/amd64/panic.c diff --git a/include/panic.h b/include/panic.h new file mode 100644 index 0000000..21715fd --- /dev/null +++ b/include/panic.h @@ -0,0 +1,8 @@ +#pragma once + +#define _PANIC_STR(x) _PANIC_STR2(x) +#define _PANIC_STR2(x) #x + +#define panic(msg) _panic_impl(_PANIC_STR(__LINE__), __FILE__, msg) + +_Noreturn void _panic_impl(char *line, char *file, char *msg); diff --git a/src/arch/amd64/panic.c b/src/arch/amd64/panic.c new file mode 100644 index 0000000..227ecce --- /dev/null +++ b/src/arch/amd64/panic.c @@ -0,0 +1,18 @@ +#include + +#include "serial.h" +#include "bindings.h" + +_Noreturn void _panic_impl(char *line, char *file, char *msg) { + cli(); + serial_out_str("\n\n!!! PANIC !!!\n"); + serial_out_str(msg); + serial_out_str("\nin file "); + serial_out_str(file); + serial_out_str(" at line "); + serial_out_str(line); + serial_out('\n'); + while (1) { + halt(); + } +}