ARM: 8073/1: unwind: Use arm_get_current_stackframe
authorNikolay Borisov <Nikolay.Borisov@arm.com>
Tue, 3 Jun 2014 18:49:14 +0000 (19:49 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Fri, 18 Jul 2014 11:29:16 +0000 (12:29 +0100)
Make the unwind code use the correct API so that the frame pointer
is extracted from the correct register.

Signed-off-by: Nikolay Borisov <Nikolay.Borisov@arm.com>
Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
arch/arm/kernel/unwind.c

index e67682f02cb2772920d693f41329f7e76e631ac5..a61a1dfbb0db50ac44c1ca5a48ca7e71153e9b9b 100644 (file)
@@ -479,12 +479,10 @@ void unwind_backtrace(struct pt_regs *regs, struct task_struct *tsk)
                tsk = current;
 
        if (regs) {
-               frame.fp = regs->ARM_fp;
-               frame.sp = regs->ARM_sp;
-               frame.lr = regs->ARM_lr;
+               arm_get_current_stackframe(regs, &frame);
                /* PC might be corrupted, use LR in that case. */
-               frame.pc = kernel_text_address(regs->ARM_pc)
-                        ? regs->ARM_pc : regs->ARM_lr;
+               if (!kernel_text_address(regs->ARM_pc))
+                       frame.pc = regs->ARM_lr;
        } else if (tsk == current) {
                frame.fp = (unsigned long)__builtin_frame_address(0);
                frame.sp = current_sp;