timer works in bochs and on physical machine. need global definition for bochs...
[akaros.git] / lib / panic.c
1
2 #include <inc/lib.h>
3
4 char *argv0;
5
6 /*
7  * Panic is called on unresolvable fatal errors.
8  * It prints "panic: <message>", then causes a breakpoint exception,
9  * which causes ROS to enter the ROS kernel monitor.
10  */
11 void
12 _panic(const char *file, int line, const char *fmt,...)
13 {
14         va_list ap;
15
16         va_start(ap, fmt);
17
18         // Print the panic message
19         if (argv0)
20                 cprintf("%s: ", argv0);
21         cprintf("user panic in %s at %s:%d: ", binaryname, file, line);
22         vcprintf(fmt, ap);
23         cprintf("\n");
24
25         // Cause a breakpoint exception
26         while (1)
27                 asm volatile("int3");
28 }
29