Reflects symbol table into the kernel
[akaros.git] / kern / include / kdebug.h
1 #ifndef ROS_KERN_KDEBUG_H
2 #define ROS_KERN_KDEBUG_H
3
4 #include <ros/common.h>
5 #include <arch/kdebug.h>
6
7 struct symtab_entry {
8         char *name;
9         uintptr_t addr;
10 };
11
12 // Debug information about a particular instruction pointer
13 typedef struct eipdebuginfo {
14         const char *eip_file;           // Source code filename for EIP
15         int eip_line;                           // Source code linenumber for EIP
16
17         const char *eip_fn_name;        // Name of function containing EIP
18                                                                 //  - Note: not null terminated!
19         int eip_fn_namelen;                     // Length of function name
20         uintptr_t eip_fn_addr;          // Address of start of function
21         int eip_fn_narg;                        // Number of function arguments
22 } eipdebuginfo_t;
23
24 int debuginfo_eip(uintptr_t eip, eipdebuginfo_t *NONNULL info);
25 void *debug_get_fn_addr(char *fn_name);
26 void backtrace(void);
27
28 /* Arch dependent, listed here for ease-of-use */
29 static inline uintptr_t get_caller_pc(void);
30
31 /* Returns a null-terminated string with the function name for a given PC /
32  * instruction pointer.  kfree() the result. */
33 char *get_fn_name(uintptr_t pc);
34
35 /* Returns the address of sym, or 0 if it does not exist */
36 uintptr_t get_symbol_addr(char *sym);
37
38 #endif /* ROS_KERN_KDEBUG_H */