summaryrefslogtreecommitdiff
path: root/src/arch/amd64/panic.c
blob: 6c35727fcbe0951db998317e00b7a04597ecae58 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <panic.h>
#include <backtrace.h>
#include <stdarg.h>

#include <lib.h>

#include "bindings.h"

_Noreturn void _panic_impl(char *line, char *file, char *format, ...) {
	cli();
	va_list list;
	va_start(list, format);
	kprintf("\n\n!!! PANIC !!!\n");
	kprintf("In file %s at line %s:\n", file, line);
	kvprintf(format, list);
	kprintf("\n\n");

	log_backtrace();
	while (1) {
		halt();
	}
}

_Noreturn void panic_interrupt(void *ip, void *bp, char *msg, ...) {
	va_list list;
	va_start(list, msg);
	cli();
	kputs("\n\n!!! PANIC !!!\n");
	kvprintf(msg, list);
	kputs("\n\n");

	log_backtrace_ex(ip, bp);
	while (1) {
		halt();
	}
}