patch for _2_4_devel KGDB in arch/ppc/kernel/ppc-stub.c
From: Mark A. Greer <hidden>
Date: 2003-03-12 00:11:47
The following patch fixes 2 problems with KGDB: a) On line 617, '®s' should be 'regs' in the call to mem2hex(). The resulting improper response packet confuses the GDB client resulting in step/next and stepi/nexti GDB commands to "lose their grip" and allow execution to continue unchecked. b) When executing an 's' command, we don't want to start single stepping until we *return* from the current exception that we're handling. Therefore, the MSR_SE bit should not be set in the MSR until the rfi from this exception is executed (i.e., only need to set that bit in 'regs->msr' and not do an actual 'mtmsr()' at this point). If the 'mtmsr(msr | MSR_SE);' line is executed at this point, a single-step exeption will occur inside the exception handler itself which causes another exception and the 'printk(KERN_ERR "interrupt while in kgdb, returning\n");' line at the beginning of handle_exception() to be executed. Not fatal but somewhat disturbing to see. Mark -- ===== arch/ppc/kernel/ppc-stub.c 1.22 vs edited =====
--- 1.22/arch/ppc/kernel/ppc-stub.c Fri Feb 28 10:26:48 2003
+++ edited/arch/ppc/kernel/ppc-stub.c Tue Mar 11 16:55:19 2003@@ -614,7 +614,7 @@ *ptr++ = hexchars[SP_REGNUM >> 4]; *ptr++ = hexchars[SP_REGNUM & 0xf]; *ptr++ = ':'; - ptr = mem2hex(((char *)®s) + SP_REGNUM*4, ptr, 4); + ptr = mem2hex(((char *)regs) + SP_REGNUM*4, ptr, 4); *ptr++ = ';'; #endif
@@ -795,7 +795,11 @@ mtmsr(msr); #else regs->msr |= MSR_SE; + /* Don't write MSR now, wait for exception return. + * Otherwise, we'll start single stepping
immediately.
+ * --MAG
mtmsr(msr | MSR_SE);
+ */
#endif
unlock_kernel();
kgdb_active = 0;
** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/