diff options
| author | Paul Mundt <lethal@linux-sh.org> | 2009-12-24 09:16:02 +0300 | 
|---|---|---|
| committer | Paul Mundt <lethal@linux-sh.org> | 2009-12-24 09:16:02 +0300 | 
| commit | f34548cb735b7a80bbbb0bdd09ad4c2173ba92d5 (patch) | |
| tree | e53c9e39b3149221779c10595bc59fa02de4f45f /arch/x86/kernel/dumpstack.c | |
| parent | 76382b5bdb77c29ab430e1b82ef1c604c8dd113b (diff) | |
| parent | 32b53076c31ce9159740b744d5eb5d9505312add (diff) | |
| download | linux-f34548cb735b7a80bbbb0bdd09ad4c2173ba92d5.tar.xz | |
Merge branch 'sh/g3-prep' into sh/for-2.6.33
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  | 
