Reworks MCS-PDR locks to avoid preempt storms
[akaros.git] / user / parlib / panic.c
1 #include <arch/arch.h>
2 #include <stdio.h>
3 #include <stdarg.h>
4
5 char *argv0;
6
7 /*
8  * Panic is called on unresolvable fatal errors.
9  * It prints "panic: <message>", then causes a breakpoint exception,
10  * which causes ROS to enter the ROS kernel monitor.
11  */
12 void
13 _panic(const char *file, int line, const char *fmt,...)
14 {
15         va_list ap;
16
17         va_start(ap, fmt);
18
19         // Print the panic message
20         if (argv0)
21                 printf("%s: ", argv0);
22         printf("user panic at %s:%d: ", file, line);
23         vprintf(fmt, ap);
24         printf("\n");
25
26         // Cause a breakpoint exception
27         while (1)
28                 breakpoint();
29 }
30