Added generic backtrace functions to allow backtrace output on buffers
[akaros.git] / kern / include / kdebug.h
1 #pragma once
2
3 #include <ros/common.h>
4 #include <ros/trapframe.h>
5 #include <arch/kdebug.h>
6 #include <profiler.h>
7
8 struct symtab_entry {
9         char *name;
10         uintptr_t addr;
11 };
12
13 #define TRACEME() oprofile_add_backtrace(read_pc(), read_bp())
14
15 void backtrace(void);
16 void gen_backtrace_frame(uintptr_t eip, uintptr_t ebp,
17                                                  void (*pfunc)(void *, const char *), void *opaque);
18 void gen_backtrace(void (*pfunc)(void *, const char *), void *opaque);
19 void backtrace_frame(uintptr_t pc, uintptr_t fp);
20 size_t backtrace_list(uintptr_t pc, uintptr_t fp, uintptr_t *pcs,
21                       size_t nr_slots);
22 void backtrace_kframe(struct hw_trapframe *hw_tf);
23 /* for includes */ struct proc;
24 void backtrace_user_ctx(struct proc *p, struct user_context *ctx);
25
26 /* Arch dependent, listed here for ease-of-use */
27 static inline uintptr_t get_caller_pc(void);
28
29 /* Returns a null-terminated string with the function name for a given PC /
30  * instruction pointer.  kfree() the result. */
31 char *get_fn_name(uintptr_t pc);
32
33 /* Returns the address of sym, or 0 if it does not exist */
34 uintptr_t get_symbol_addr(char *sym);
35
36 /* For a poor-mans function tracer (can add these with spatch) */
37 void __print_func_entry(const char *func, const char *file);
38 void __print_func_exit(const char *func, const char *file);
39 #define print_func_entry() __print_func_entry(__FUNCTION__, __FILE__)
40 #define print_func_exit() __print_func_exit(__FUNCTION__, __FILE__)
41 void hexdump(void *v, int length);
42 void pahexdump(uintptr_t pa, int length);
43 int printdump(char *buf, int buflen, uint8_t *data);
44
45 extern bool printx_on;
46 void set_printx(int mode);
47 #define printx(args...) if (printx_on) printk(args)
48 #define trace_printx(args...) if (printx_on) trace_printk(args)
49
50 void debug_addr_proc(struct proc *p, unsigned long addr);
51 void debug_addr_pid(int pid, unsigned long addr);