diff options
| author | Takashi Iwai <tiwai@suse.de> | 2009-12-25 14:15:31 +0100 |
|---|---|---|
| committer | Takashi Iwai <tiwai@suse.de> | 2009-12-25 14:15:31 +0100 |
| commit | 52e04ea89da57274f0313d2bd73ba02f686cfdeb (patch) | |
| tree | 6ce5d086bcaea4cb534b3fcf6ba736eb48d582a4 /arch/x86/kernel/dumpstack.c | |
| parent | 41116e926cb92292fa4fcbe888ae8133fa0038e6 (diff) | |
| parent | 8b90ca08821fee79e181bfcbc3bbd41ef5637136 (diff) | |
| download | cachepc-linux-52e04ea89da57274f0313d2bd73ba02f686cfdeb.tar.gz cachepc-linux-52e04ea89da57274f0313d2bd73ba02f686cfdeb.zip | |
Merge branch 'fix/misc' into topic/misc
Diffstat (limited to 'arch/x86/kernel/dumpstack.c')
| -rw-r--r-- | arch/x86/kernel/dumpstack.c | 33 |
1 files changed, 29 insertions, 4 deletions
diff --git a/arch/x86/kernel/dumpstack.c b/arch/x86/kernel/dumpstack.c index 0a0aa1cec8f1..c56bc2873030 100644 --- a/arch/x86/kernel/dumpstack.c +++ b/arch/x86/kernel/dumpstack.c @@ -109,6 +109,30 @@ print_context_stack(struct thread_info *tinfo, } return bp; } +EXPORT_SYMBOL_GPL(print_context_stack); + +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) +{ + struct stack_frame *frame = (struct stack_frame *)bp; + unsigned long *ret_addr = &frame->return_address; + + while (valid_stack_ptr(tinfo, ret_addr, sizeof(*ret_addr), end)) { + unsigned long addr = *ret_addr; + + if (__kernel_text_address(addr)) { + ops->address(data, addr, 1); + frame = frame->next_frame; + ret_addr = &frame->return_address; + print_ftrace_graph_addr(addr, data, ops, tinfo, graph); + } + } + return (unsigned long)frame; +} +EXPORT_SYMBOL_GPL(print_context_stack_bp); static void @@ -141,10 +165,11 @@ static void print_trace_address(void *data, unsigned long addr, int reliable) } static const struct stacktrace_ops print_trace_ops = { - .warning = print_trace_warning, - .warning_symbol = print_trace_warning_symbol, - .stack = print_trace_stack, - .address = print_trace_address, + .warning = print_trace_warning, + .warning_symbol = print_trace_warning_symbol, + .stack = print_trace_stack, + .address = print_trace_address, + .walk_stack = print_context_stack, }; void |
