Do not breakpoint() on parlib's assert
[akaros.git] / user / parlib / panic.c
1 #include <parlib/arch/arch.h>
2 #include <stdio.h>
3 #include <stdarg.h>
4 #include <parlib/assert.h>
5 #include <stdlib.h>
6 #include <parlib/ros_debug.h>
7
8 char *argv0;
9
10 /*
11  * Panic is called on unresolvable fatal errors.
12  * It prints "panic: <message>", then causes a breakpoint exception,
13  * which causes ROS to enter the ROS kernel monitor.
14  */
15 void
16 _panic(const char *file, int line, const char *fmt,...)
17 {
18         va_list ap;
19
20         va_start(ap, fmt);
21
22         // Print the panic message
23         if (argv0)
24                 printf("%s: ", argv0);
25         printf("user panic at %s:%d: ", file, line);
26         vprintf(fmt, ap);
27         printf("\n");
28
29         // Cause a breakpoint exception
30         while (1)
31                 breakpoint();
32 }
33
34 void _assert_failed(const char *file, int line, const char *msg)
35 {
36         ros_debug("[user] %s:%d, vcore %d, Assertion failed: %s\n",
37                   file, line, vcore_id(), msg);
38         abort();
39 }