diff options
Diffstat (limited to 'arch/powerpc/kernel/process.c')
| -rw-r--r-- | arch/powerpc/kernel/process.c | 10 | 
1 files changed, 7 insertions, 3 deletions
| diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c index 1168c5f440ab..2ec1eaed19ca 100644 --- a/arch/powerpc/kernel/process.c +++ b/arch/powerpc/kernel/process.c | |||
| @@ -1016,9 +1016,13 @@ void show_stack(struct task_struct *tsk, unsigned long *stack) | |||
| 1016 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | 1016 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | 
| 1017 | int curr_frame = current->curr_ret_stack; | 1017 | int curr_frame = current->curr_ret_stack; | 
| 1018 | extern void return_to_handler(void); | 1018 | extern void return_to_handler(void); | 
| 1019 | unsigned long addr = (unsigned long)return_to_handler; | 1019 | unsigned long rth = (unsigned long)return_to_handler; | 
| 1020 | unsigned long mrth = -1; | ||
| 1020 | #ifdef CONFIG_PPC64 | 1021 | #ifdef CONFIG_PPC64 | 
| 1021 | addr = *(unsigned long*)addr; | 1022 | extern void mod_return_to_handler(void); | 
| 1023 | rth = *(unsigned long *)rth; | ||
| 1024 | mrth = (unsigned long)mod_return_to_handler; | ||
| 1025 | mrth = *(unsigned long *)mrth; | ||
| 1022 | #endif | 1026 | #endif | 
| 1023 | #endif | 1027 | #endif | 
| 1024 | 1028 | ||
| @@ -1044,7 +1048,7 @@ void show_stack(struct task_struct *tsk, unsigned long *stack) | |||
| 1044 | if (!firstframe || ip != lr) { | 1048 | if (!firstframe || ip != lr) { | 
| 1045 | printk("["REG"] ["REG"] %pS", sp, ip, (void *)ip); | 1049 | printk("["REG"] ["REG"] %pS", sp, ip, (void *)ip); | 
| 1046 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | 1050 | #ifdef CONFIG_FUNCTION_GRAPH_TRACER | 
| 1047 | if (ip == addr && curr_frame >= 0) { | 1051 | if ((ip == rth || ip == mrth) && curr_frame >= 0) { | 
| 1048 | printk(" (%pS)", | 1052 | printk(" (%pS)", | 
| 1049 | (void *)current->ret_stack[curr_frame].ret); | 1053 | (void *)current->ret_stack[curr_frame].ret); | 
| 1050 | curr_frame--; | 1054 | curr_frame--; | 
