From 0a82394710d83d0ffe60050bdcbf0db6c9e06f7d Mon Sep 17 00:00:00 2001 From: Paul Mundt Date: Tue, 10 Apr 2012 14:00:30 +0900 Subject: [PATCH] --- yaml --- r: 305219 b: refs/heads/master c: 10c5e4e137dc97e54cabd62a6109988ff8670faa h: refs/heads/master i: 305217: 0949956ec098c3423b88b8ffb236e3bf84c3d4f8 305215: 82c2e33126d26b91cd8722a201b0ca5f1f06d731 v: v3 --- [refs] | 2 +- trunk/arch/sh/kernel/kgdb.c | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 45d4a1faca32..5dce8081aae7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: fd03e81812a8fb6121773226a4e0c702926077ae +refs/heads/master: 10c5e4e137dc97e54cabd62a6109988ff8670faa diff --git a/trunk/arch/sh/kernel/kgdb.c b/trunk/arch/sh/kernel/kgdb.c index d25b5ed68b24..ba8e76325d12 100644 --- a/trunk/arch/sh/kernel/kgdb.c +++ b/trunk/arch/sh/kernel/kgdb.c @@ -222,8 +222,31 @@ char *dbg_get_reg(int regno, void *mem, struct pt_regs *regs) void sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *p) { + struct pt_regs *thread_regs = task_pt_regs(p); + int reg; + + /* Initialize to zero */ + for (reg = 0; reg < DBG_MAX_REG_NUM; reg++) + gdb_regs[reg] = 0; + + /* + * Copy out GP regs 8 to 14. + * + * switch_to() relies on SR.RB toggling, so regs 0->7 are banked + * and need privileged instructions to get to. The r15 value we + * fetch from the thread info directly. + */ + for (reg = GDB_R8; reg < GDB_R15; reg++) + gdb_regs[reg] = thread_regs->regs[reg]; + gdb_regs[GDB_R15] = p->thread.sp; gdb_regs[GDB_PC] = p->thread.pc; + + /* + * Additional registers we have context for + */ + gdb_regs[GDB_PR] = thread_regs->pr; + gdb_regs[GDB_GBR] = thread_regs->gbr; } int kgdb_arch_handle_exception(int e_vector, int signo, int err_code,