Skip to content

Commit 834911e

Browse files
author
Paul Walmsley
committed
riscv: kgdb: fix several debug register assignment bugs
Fix several bugs in the RISC-V kgdb implementation: - The element of dbg_reg_def[] that is supposed to pertain to the S1 register embeds instead the struct pt_regs offset of the A1 register. Fix this to use the S1 register offset in struct pt_regs. - The sleeping_thread_to_gdb_regs() function copies the value of the S10 register into the gdb_regs[] array element meant for the S9 register, and copies the value of the S11 register into the array element meant for the S10 register. It also neglects to copy the value of the S11 register. Fix all of these issues. Fixes: fe89bd2 ("riscv: Add KGDB support") Cc: Vincent Chen <vincent.chen@sifive.com> Link: https://patch.msgid.link/fde376f8-bcfd-bfe4-e467-07d8f7608d05@kernel.org Signed-off-by: Paul Walmsley <pjw@kernel.org>
1 parent c369299 commit 834911e

1 file changed

Lines changed: 4 additions & 3 deletions

File tree

arch/riscv/kernel/kgdb.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ struct dbg_reg_def_t dbg_reg_def[DBG_MAX_REG_NUM] = {
175175
{DBG_REG_T1, GDB_SIZEOF_REG, offsetof(struct pt_regs, t1)},
176176
{DBG_REG_T2, GDB_SIZEOF_REG, offsetof(struct pt_regs, t2)},
177177
{DBG_REG_FP, GDB_SIZEOF_REG, offsetof(struct pt_regs, s0)},
178-
{DBG_REG_S1, GDB_SIZEOF_REG, offsetof(struct pt_regs, a1)},
178+
{DBG_REG_S1, GDB_SIZEOF_REG, offsetof(struct pt_regs, s1)},
179179
{DBG_REG_A0, GDB_SIZEOF_REG, offsetof(struct pt_regs, a0)},
180180
{DBG_REG_A1, GDB_SIZEOF_REG, offsetof(struct pt_regs, a1)},
181181
{DBG_REG_A2, GDB_SIZEOF_REG, offsetof(struct pt_regs, a2)},
@@ -244,8 +244,9 @@ sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *task)
244244
gdb_regs[DBG_REG_S6_OFF] = task->thread.s[6];
245245
gdb_regs[DBG_REG_S7_OFF] = task->thread.s[7];
246246
gdb_regs[DBG_REG_S8_OFF] = task->thread.s[8];
247-
gdb_regs[DBG_REG_S9_OFF] = task->thread.s[10];
248-
gdb_regs[DBG_REG_S10_OFF] = task->thread.s[11];
247+
gdb_regs[DBG_REG_S9_OFF] = task->thread.s[9];
248+
gdb_regs[DBG_REG_S10_OFF] = task->thread.s[10];
249+
gdb_regs[DBG_REG_S11_OFF] = task->thread.s[11];
249250
gdb_regs[DBG_REG_EPC_OFF] = task->thread.ra;
250251
}
251252

0 commit comments

Comments
 (0)