Userspace no longer includes the kernel's arch/*
[akaros.git] / user / parlib / panic.c
1
2 #include <ros/arch/arch.h>
3 #include <stdio.h>
4 #include <stdarg.h>
5
6 char *argv0;
7
8 // TODO: have arch specific user includes
9 #ifdef __i386__
10 static __inline void
11 breakpoint(void)
12 {
13         __asm __volatile("int3");
14 }
15 #else
16 static __inline void
17 breakpoint(void)
18 {
19         asm volatile ("ta 0x7f");
20 }
21 #endif
22
23 /*
24  * Panic is called on unresolvable fatal errors.
25  * It prints "panic: <message>", then causes a breakpoint exception,
26  * which causes ROS to enter the ROS kernel monitor.
27  */
28 void
29 _panic(const char *file, int line, const char *fmt,...)
30 {
31         va_list ap;
32
33         va_start(ap, fmt);
34
35         // Print the panic message
36         if (argv0)
37                 printf("%s: ", argv0);
38         printf("user panic at %s:%d: ", file, line);
39         vprintf(fmt, ap);
40         printf("\n");
41
42         // Cause a breakpoint exception
43         while (1)
44                 breakpoint();
45 }
46