diff options
Diffstat (limited to 'include/linux/stacktrace.h')
| -rw-r--r-- | include/linux/stacktrace.h | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/include/linux/stacktrace.h b/include/linux/stacktrace.h index 40decfbb9a24..f0cfd12cb45e 100644 --- a/include/linux/stacktrace.h +++ b/include/linux/stacktrace.h | |||
| @@ -23,6 +23,44 @@ unsigned int stack_trace_save_regs(struct pt_regs *regs, unsigned long *store, | |||
| 23 | unsigned int stack_trace_save_user(unsigned long *store, unsigned int size); | 23 | unsigned int stack_trace_save_user(unsigned long *store, unsigned int size); |
| 24 | 24 | ||
| 25 | /* Internal interfaces. Do not use in generic code */ | 25 | /* Internal interfaces. Do not use in generic code */ |
| 26 | #ifdef CONFIG_ARCH_STACKWALK | ||
| 27 | |||
| 28 | /** | ||
| 29 | * stack_trace_consume_fn - Callback for arch_stack_walk() | ||
| 30 | * @cookie: Caller supplied pointer handed back by arch_stack_walk() | ||
| 31 | * @addr: The stack entry address to consume | ||
| 32 | * @reliable: True when the stack entry is reliable. Required by | ||
| 33 | * some printk based consumers. | ||
| 34 | * | ||
| 35 | * Return: True, if the entry was consumed or skipped | ||
| 36 | * False, if there is no space left to store | ||
| 37 | */ | ||
| 38 | typedef bool (*stack_trace_consume_fn)(void *cookie, unsigned long addr, | ||
| 39 | bool reliable); | ||
| 40 | /** | ||
| 41 | * arch_stack_walk - Architecture specific function to walk the stack | ||
| 42 | * @consume_entry: Callback which is invoked by the architecture code for | ||
| 43 | * each entry. | ||
| 44 | * @cookie: Caller supplied pointer which is handed back to | ||
| 45 | * @consume_entry | ||
| 46 | * @task: Pointer to a task struct, can be NULL | ||
| 47 | * @regs: Pointer to registers, can be NULL | ||
| 48 | * | ||
| 49 | * ============ ======= ============================================ | ||
| 50 | * task regs | ||
| 51 | * ============ ======= ============================================ | ||
| 52 | * task NULL Stack trace from task (can be current) | ||
| 53 | * current regs Stack trace starting on regs->stackpointer | ||
| 54 | * ============ ======= ============================================ | ||
| 55 | */ | ||
| 56 | void arch_stack_walk(stack_trace_consume_fn consume_entry, void *cookie, | ||
| 57 | struct task_struct *task, struct pt_regs *regs); | ||
| 58 | int arch_stack_walk_reliable(stack_trace_consume_fn consume_entry, void *cookie, | ||
| 59 | struct task_struct *task); | ||
| 60 | void arch_stack_walk_user(stack_trace_consume_fn consume_entry, void *cookie, | ||
| 61 | const struct pt_regs *regs); | ||
| 62 | |||
| 63 | #else /* CONFIG_ARCH_STACKWALK */ | ||
| 26 | struct stack_trace { | 64 | struct stack_trace { |
| 27 | unsigned int nr_entries, max_entries; | 65 | unsigned int nr_entries, max_entries; |
| 28 | unsigned long *entries; | 66 | unsigned long *entries; |
| @@ -37,6 +75,7 @@ extern void save_stack_trace_tsk(struct task_struct *tsk, | |||
| 37 | extern int save_stack_trace_tsk_reliable(struct task_struct *tsk, | 75 | extern int save_stack_trace_tsk_reliable(struct task_struct *tsk, |
| 38 | struct stack_trace *trace); | 76 | struct stack_trace *trace); |
| 39 | extern void save_stack_trace_user(struct stack_trace *trace); | 77 | extern void save_stack_trace_user(struct stack_trace *trace); |
| 78 | #endif /* !CONFIG_ARCH_STACKWALK */ | ||
| 40 | #endif /* CONFIG_STACKTRACE */ | 79 | #endif /* CONFIG_STACKTRACE */ |
| 41 | 80 | ||
| 42 | #if defined(CONFIG_STACKTRACE) && defined(CONFIG_HAVE_RELIABLE_STACKTRACE) | 81 | #if defined(CONFIG_STACKTRACE) && defined(CONFIG_HAVE_RELIABLE_STACKTRACE) |
