diff options
Diffstat (limited to 'kernel/src/panic.c')
-rw-r--r-- | kernel/src/panic.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/kernel/src/panic.c b/kernel/src/panic.c new file mode 100644 index 0000000..96ad3b9 --- /dev/null +++ b/kernel/src/panic.c @@ -0,0 +1,25 @@ +#include <sys.h> +#include <stdarg.h> +#include <stdlib.h> +#include <panic.h> +#include <print.h> +#include <term.h> + +__attribute__((noreturn)) +void _panic_impl(char* msg, int line, char* file, ...) { + arch_disable_int(); + va_list args; + va_start(args, file); + term_clear(); + term_setpos(0, 0); + term_setfg(VGA_LIGHT_RED); + puts("!!!PANIC!!!\n"); + term_setfg(VGA_WHITE); + vprintk(msg, args); + if (!term_newline()) putchar('\n'); + printk("\nin %s at line %d\n", file, line); + term_flush(); + while(1) { + arch_halt(); + } +} |