feat: kernel stack tracing
[lunaix-os.git] / lunaix-os / includes / lunaix / trace.h
1 #ifndef __LUNAIX_TRACE_H
2 #define __LUNAIX_TRACE_H
3
4 #include <lunaix/boot_generic.h>
5 #include <sys/interrupts.h>
6
7 struct ksym_entry
8 {
9     ptr_t pc;
10     u32_t label_off;
11 };
12
13 struct trace_record
14 {
15     ptr_t pc;
16     char* symbol;
17 };
18
19 struct ksyms
20 {
21     u32_t ksym_count;
22     u32_t ksym_label_off;
23     struct ksym_entry syms[0];
24 };
25
26 struct trace_context
27 {
28     struct ksyms* ksym_table;
29 };
30
31 void
32 trace_modksyms_init(struct boot_handoff* bhctx);
33
34 struct ksym_entry*
35 trace_sym_lookup(ptr_t pc);
36
37 int
38 trace_walkback(struct trace_record* tb_buffer,
39                ptr_t fp,
40                int limit,
41                ptr_t* last_fp);
42
43 void
44 trace_printstack_of(ptr_t fp);
45
46 void
47 trace_printstack_isr(const isr_param* isrm);
48
49 void
50 trace_printstack();
51
52 #endif /* __LUNAIX_TRACE_H */