From: Catalin Marinas Date: Tue, 17 Sep 2013 17:49:46 +0000 (+0100) Subject: arm64: Correctly report LR and SP for compat tasks X-Git-Tag: upstream/snapshot3+hdmi~4201^2~7 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6ca68e802612c87c31aa83d50c37ed0d88774a46;p=platform%2Fadaptation%2Frenesas_rcar%2Frenesas_kernel.git arm64: Correctly report LR and SP for compat tasks When a task crashes and we print debugging information, ensure that compat tasks show the actual AArch32 LR and SP registers rather than the AArch64 ones. Signed-off-by: Catalin Marinas --- diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c index 57fb55c..7ae8a1f 100644 --- a/arch/arm64/kernel/process.c +++ b/arch/arm64/kernel/process.c @@ -143,15 +143,26 @@ void machine_restart(char *cmd) void __show_regs(struct pt_regs *regs) { - int i; + int i, top_reg; + u64 lr, sp; + + if (compat_user_mode(regs)) { + lr = regs->compat_lr; + sp = regs->compat_sp; + top_reg = 12; + } else { + lr = regs->regs[30]; + sp = regs->sp; + top_reg = 29; + } show_regs_print_info(KERN_DEFAULT); print_symbol("PC is at %s\n", instruction_pointer(regs)); - print_symbol("LR is at %s\n", regs->regs[30]); + print_symbol("LR is at %s\n", lr); printk("pc : [<%016llx>] lr : [<%016llx>] pstate: %08llx\n", - regs->pc, regs->regs[30], regs->pstate); - printk("sp : %016llx\n", regs->sp); - for (i = 29; i >= 0; i--) { + regs->pc, lr, regs->pstate); + printk("sp : %016llx\n", sp); + for (i = top_reg; i >= 0; i--) { printk("x%-2d: %016llx ", i, regs->regs[i]); if (i % 2 == 0) printk("\n");