| #ifndef _ASM_X86_STACKTRACE_H |
| #define _ASM_X86_STACKTRACE_H |
| |
| extern int kstack_depth_to_print; |
| |
| int x86_is_stack_id(int id, char *name); |
| |
| struct thread_info; |
| struct stacktrace_ops; |
| |
| typedef unsigned long (*walk_stack_t)(struct thread_info *tinfo, |
| unsigned long *stack, |
| unsigned long bp, |
| const struct stacktrace_ops *ops, |
| void *data, |
| unsigned long *end, |
| int *graph); |
| |
| extern unsigned long |
| print_context_stack(struct thread_info *tinfo, |
| unsigned long *stack, unsigned long bp, |
| const struct stacktrace_ops *ops, void *data, |
| unsigned long *end, int *graph); |
| |
| extern unsigned long |
| print_context_stack_bp(struct thread_info *tinfo, |
| unsigned long *stack, unsigned long bp, |
| const struct stacktrace_ops *ops, void *data, |
| unsigned long *end, int *graph); |
| |
| /* Generic stack tracer with callbacks */ |
| |
| struct stacktrace_ops { |
| void (*warning)(void *data, char *msg); |
| /* msg must contain %s for the symbol */ |
| void (*warning_symbol)(void *data, char *msg, unsigned long symbol); |
| void (*address)(void *data, unsigned long address, int reliable); |
| /* On negative return stop dumping */ |
| int (*stack)(void *data, char *name); |
| walk_stack_t walk_stack; |
| }; |
| |
| void dump_trace(struct task_struct *tsk, struct pt_regs *regs, |
| unsigned long *stack, unsigned long bp, |
| const struct stacktrace_ops *ops, void *data); |
| |
| #endif /* _ASM_X86_STACKTRACE_H */ |