LoongArch: Print GPRs with ABI names when showing registers
[linux-2.6-microblaze.git] / arch / loongarch / kernel / traps.c
index 3fb4709..57768a6 100644 (file)
@@ -158,22 +158,32 @@ static void __show_regs(const struct pt_regs *regs)
        const int field = 2 * sizeof(unsigned long);
        unsigned int excsubcode;
        unsigned int exccode;
-       int i;
 
        show_regs_print_info(KERN_DEFAULT);
 
-       /*
-        * Saved main processor registers
-        */
-       for (i = 0; i < 32; ) {
-               if ((i % 4) == 0)
-                       printk("$%2d   :", i);
-               pr_cont(" %0*lx", field, regs->regs[i]);
-
-               i++;
-               if ((i % 4) == 0)
-                       pr_cont("\n");
-       }
+       /* Print saved GPRs except $zero (substituting with PC/ERA) */
+#define GPR_FIELD(x) field, regs->regs[x]
+       printk("pc %0*lx ra %0*lx tp %0*lx sp %0*lx\n",
+              field, regs->csr_era, GPR_FIELD(1), GPR_FIELD(2), GPR_FIELD(3));
+       printk("a0 %0*lx a1 %0*lx a2 %0*lx a3 %0*lx\n",
+              GPR_FIELD(4), GPR_FIELD(5), GPR_FIELD(6), GPR_FIELD(7));
+       printk("a4 %0*lx a5 %0*lx a6 %0*lx a7 %0*lx\n",
+              GPR_FIELD(8), GPR_FIELD(9), GPR_FIELD(10), GPR_FIELD(11));
+       printk("t0 %0*lx t1 %0*lx t2 %0*lx t3 %0*lx\n",
+              GPR_FIELD(12), GPR_FIELD(13), GPR_FIELD(14), GPR_FIELD(15));
+       printk("t4 %0*lx t5 %0*lx t6 %0*lx t7 %0*lx\n",
+              GPR_FIELD(16), GPR_FIELD(17), GPR_FIELD(18), GPR_FIELD(19));
+       printk("t8 %0*lx u0 %0*lx s9 %0*lx s0 %0*lx\n",
+              GPR_FIELD(20), GPR_FIELD(21), GPR_FIELD(22), GPR_FIELD(23));
+       printk("s1 %0*lx s2 %0*lx s3 %0*lx s4 %0*lx\n",
+              GPR_FIELD(24), GPR_FIELD(25), GPR_FIELD(26), GPR_FIELD(27));
+       printk("s5 %0*lx s6 %0*lx s7 %0*lx s8 %0*lx\n",
+              GPR_FIELD(28), GPR_FIELD(29), GPR_FIELD(30), GPR_FIELD(31));
+
+       /* 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));
+#undef GPR_FIELD
 
        /*
         * Saved csr registers