Skip to content

Commit f6a79b6

Browse files
xen0nchenhuacai
authored andcommitted
LoongArch: Print GPRs with ABI names when showing registers
Show PC (CSR.ERA) in place of $zero, and also show the syscall restart flag (conveniently stuffed in regs[0]) if non-zero. Signed-off-by: WANG Xuerui <git@xen0n.name> Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
1 parent aa55225 commit f6a79b6

1 file changed

Lines changed: 23 additions & 13 deletions

File tree

arch/loongarch/kernel/traps.c

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -158,22 +158,32 @@ static void __show_regs(const struct pt_regs *regs)
158158
const int field = 2 * sizeof(unsigned long);
159159
unsigned int excsubcode;
160160
unsigned int exccode;
161-
int i;
162161

163162
show_regs_print_info(KERN_DEFAULT);
164163

165-
/*
166-
* Saved main processor registers
167-
*/
168-
for (i = 0; i < 32; ) {
169-
if ((i % 4) == 0)
170-
printk("$%2d :", i);
171-
pr_cont(" %0*lx", field, regs->regs[i]);
172-
173-
i++;
174-
if ((i % 4) == 0)
175-
pr_cont("\n");
176-
}
164+
/* Print saved GPRs except $zero (substituting with PC/ERA) */
165+
#define GPR_FIELD(x) field, regs->regs[x]
166+
printk("pc %0*lx ra %0*lx tp %0*lx sp %0*lx\n",
167+
field, regs->csr_era, GPR_FIELD(1), GPR_FIELD(2), GPR_FIELD(3));
168+
printk("a0 %0*lx a1 %0*lx a2 %0*lx a3 %0*lx\n",
169+
GPR_FIELD(4), GPR_FIELD(5), GPR_FIELD(6), GPR_FIELD(7));
170+
printk("a4 %0*lx a5 %0*lx a6 %0*lx a7 %0*lx\n",
171+
GPR_FIELD(8), GPR_FIELD(9), GPR_FIELD(10), GPR_FIELD(11));
172+
printk("t0 %0*lx t1 %0*lx t2 %0*lx t3 %0*lx\n",
173+
GPR_FIELD(12), GPR_FIELD(13), GPR_FIELD(14), GPR_FIELD(15));
174+
printk("t4 %0*lx t5 %0*lx t6 %0*lx t7 %0*lx\n",
175+
GPR_FIELD(16), GPR_FIELD(17), GPR_FIELD(18), GPR_FIELD(19));
176+
printk("t8 %0*lx u0 %0*lx s9 %0*lx s0 %0*lx\n",
177+
GPR_FIELD(20), GPR_FIELD(21), GPR_FIELD(22), GPR_FIELD(23));
178+
printk("s1 %0*lx s2 %0*lx s3 %0*lx s4 %0*lx\n",
179+
GPR_FIELD(24), GPR_FIELD(25), GPR_FIELD(26), GPR_FIELD(27));
180+
printk("s5 %0*lx s6 %0*lx s7 %0*lx s8 %0*lx\n",
181+
GPR_FIELD(28), GPR_FIELD(29), GPR_FIELD(30), GPR_FIELD(31));
182+
183+
/* The slot for $zero is reused as the syscall restart flag */
184+
if (regs->regs[0])
185+
printk("syscall restart flag: %0*lx\n", GPR_FIELD(0));
186+
#undef GPR_FIELD
177187

178188
/*
179189
* Saved csr registers

0 commit comments

Comments
 (0)