perf: Treat the kernel like [kernel.kallsyms]
[akaros.git] / user / parlib / debug.c
1 #include <parlib/common.h>
2 #include <parlib/parlib.h>
3 #include <stdio.h>
4 #include <unistd.h>
5 #include <parlib/spinlock.h>
6 #include <ros/common.h>
7
8 int akaros_printf(const char *format, ...)
9 {
10         va_list ap;
11         int ret;
12
13         va_start(ap, format);
14         ret = vprintf(format, ap);
15         va_end(ap);
16         return ret;
17 }
18
19 /* Poor man's Ftrace, won't work well with concurrency. */
20 static const char *blacklist[] = {
21         "whatever",
22 };
23
24 static bool is_blacklisted(const char *s)
25 {
26         for (int i = 0; i < COUNT_OF(blacklist); i++) {
27                 if (!strcmp(blacklist[i], s))
28                         return TRUE;
29         }
30         return FALSE;
31 }
32
33 static int tab_depth = 0;
34 static bool print = TRUE;
35
36 void reset_print_func_depth(void)
37 {
38         tab_depth = 0;
39 }
40
41 void toggle_print_func(void)
42 {
43         print = !print;
44         printf("Func entry/exit printing is now %sabled\n", print ? "en" : "dis");
45 }
46
47 static spinlock_t lock = {0};
48
49 void __print_func_entry(const char *func, const char *file)
50 {
51         if (!print)
52                 return;
53         if (is_blacklisted(func))
54                 return;
55         spinlock_lock(&lock);
56         printd("Vcore %2d", vcore_id());        /* helps with multicore output */
57         for (int i = 0; i < tab_depth; i++)
58                 printf("\t");
59         printf("%s() in %s\n", func, file);
60         spinlock_unlock(&lock);
61         tab_depth++;
62 }
63
64 void __print_func_exit(const char *func, const char *file)
65 {
66         if (!print)
67                 return;
68         if (is_blacklisted(func))
69                 return;
70         tab_depth--;
71         spinlock_lock(&lock);
72         printd("Vcore %2d", vcore_id());
73         for (int i = 0; i < tab_depth; i++)
74                 printf("\t");
75         printf("---- %s()\n", func);
76         spinlock_unlock(&lock);
77 }