|  | #ifndef ROS_KERN_KDEBUG_H | 
|  | #define ROS_KERN_KDEBUG_H | 
|  |  | 
|  | #include <ros/common.h> | 
|  | #include <arch/kdebug.h> | 
|  |  | 
|  | struct symtab_entry { | 
|  | char *name; | 
|  | uintptr_t addr; | 
|  | }; | 
|  |  | 
|  | void backtrace(void); | 
|  | void backtrace_frame(uintptr_t pc, uintptr_t fp); | 
|  | size_t backtrace_list(uintptr_t pc, uintptr_t fp, uintptr_t *pcs, | 
|  | size_t nr_slots); | 
|  |  | 
|  | /* Arch dependent, listed here for ease-of-use */ | 
|  | static inline uintptr_t get_caller_pc(void); | 
|  |  | 
|  | /* Returns a null-terminated string with the function name for a given PC / | 
|  | * instruction pointer.  kfree() the result. */ | 
|  | char *get_fn_name(uintptr_t pc); | 
|  |  | 
|  | /* Returns the address of sym, or 0 if it does not exist */ | 
|  | uintptr_t get_symbol_addr(char *sym); | 
|  |  | 
|  | /* For a poor-mans function tracer (can add these with spatch) */ | 
|  | void __print_func_entry(const char *func, const char *file); | 
|  | void __print_func_exit(const char *func, const char *file); | 
|  | #define print_func_entry() __print_func_entry(__FUNCTION__, __FILE__) | 
|  | #define print_func_exit() __print_func_exit(__FUNCTION__, __FILE__) | 
|  | void hexdump(void *v, int length); | 
|  | void pahexdump(uintptr_t pa, int length); | 
|  | int printdump(char *buf, int buflen, uint8_t *data); | 
|  |  | 
|  | extern bool printx_on; | 
|  | void set_printx(int mode); | 
|  | #define printx(args...) if (printx_on) printk(args) | 
|  | #define trace_printx(args...) if (printx_on) trace_printk(args) | 
|  |  | 
|  | #include <oprofile.h> | 
|  | #define TRACEME() oprofile_add_backtrace(read_pc(), read_bp()) | 
|  |  | 
|  | void debug_addr_proc(struct proc *p, unsigned long addr); | 
|  | void debug_addr_pid(int pid, unsigned long addr); | 
|  |  | 
|  | #endif /* ROS_KERN_KDEBUG_H */ |