LoongArch: Print symbol info for $ra and CSR.ERA only for kernel-mode contexts
authorWANG Xuerui <git@xen0n.name>
Mon, 1 May 2023 09:19:10 +0000 (17:19 +0800)
committerHuacai Chen <chenhuacai@loongson.cn>
Mon, 1 May 2023 09:19:10 +0000 (17:19 +0800)
Otherwise the addresses wouldn't make sense at all.

While at it, align the "map keys" to maintain right-alignment with the
"estat:" line too; also swap the ERA and ra lines so all CSRs are shown
together.

Signed-off-by: WANG Xuerui <git@xen0n.name>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
arch/loongarch/kernel/traps.c

index 57768a6de1cf0bf9eb2b15a8b74038d13bded153..ab08548315b860f095f521d4d92ed1a2d263a8ae 100644 (file)
@@ -183,16 +183,19 @@ static void __show_regs(const struct pt_regs *regs)
        /* The slot for $zero is reused as the syscall restart flag */
        if (regs->regs[0])
                printk("syscall restart flag: %0*lx\n", GPR_FIELD(0));
+
+       if (user_mode(regs)) {
+               printk("   ra: %0*lx\n", GPR_FIELD(1));
+               printk("  ERA: %0*lx\n", field, regs->csr_era);
+       } else {
+               printk("   ra: %0*lx %pS\n", GPR_FIELD(1), (void *) regs->regs[1]);
+               printk("  ERA: %0*lx %pS\n", field, regs->csr_era, (void *) regs->csr_era);
+       }
 #undef GPR_FIELD
 
        /*
         * Saved csr registers
         */
-       printk("era   : %0*lx %pS\n", field, regs->csr_era,
-              (void *) regs->csr_era);
-       printk("ra    : %0*lx %pS\n", field, regs->regs[1],
-              (void *) regs->regs[1]);
-
        printk("CSR crmd: %08lx ", regs->csr_crmd);
        printk("CSR prmd: %08lx ", regs->csr_prmd);
        printk("CSR euen: %08lx ", regs->csr_euen);