tile kgdb: fix bug in copy to gdb regs, and optimize memset
David Binderman pointed out that we were doing a full memset() of the gdb register buffer and then doing a memcpy() to it that was almost as big. This commit optimizes that by only doing a memset() of the registers that are intended to be zero. While making this change I noticed that we were not copying the link register (LR, number 55) due to a fencepost error in commit f419e6f63c5a ("arch: tile: kernel: kgdb.c: Use memcpy() instead of pointer copy one by one"), and I've corrected that as well. Reported-by: David Binderman <dcb314@hotmail.com> Signed-off-by: Chris Metcalf <cmetcalf@ezchip.com>
This commit is contained in:
parent
81f70ba233
commit
77ef8f5177
@ -126,15 +126,15 @@ void
|
||||
sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *task)
|
||||
{
|
||||
struct pt_regs *thread_regs;
|
||||
const int NGPRS = TREG_LAST_GPR + 1;
|
||||
|
||||
if (task == NULL)
|
||||
return;
|
||||
|
||||
/* Initialize to zero. */
|
||||
memset(gdb_regs, 0, NUMREGBYTES);
|
||||
|
||||
thread_regs = task_pt_regs(task);
|
||||
memcpy(gdb_regs, thread_regs, TREG_LAST_GPR * sizeof(unsigned long));
|
||||
memcpy(gdb_regs, thread_regs, NGPRS * sizeof(unsigned long));
|
||||
memset(&gdb_regs[NGPRS], 0,
|
||||
(TILEGX_PC_REGNUM - NGPRS) * sizeof(unsigned long));
|
||||
gdb_regs[TILEGX_PC_REGNUM] = thread_regs->pc;
|
||||
gdb_regs[TILEGX_FAULTNUM_REGNUM] = thread_regs->faultnum;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user