kgdb,i386: use address that SP register points to in the exception frame
authorJason Wessel <jason.wessel@windriver.com>
Thu, 12 Feb 2009 00:46:32 +0000 (18:46 -0600)
committerJason Wessel <jason.wessel@windriver.com>
Fri, 15 May 2009 12:56:25 +0000 (07:56 -0500)
The treatment of the SP register is different on x86_64 and i386.
This is a regression fix that lived outside the mainline kernel from
2.6.27 to now.  The regression was a result of the original merge
consolidation of the i386 and x86_64 archs to x86.

The incorrectly reported SP on i386 prevented stack tracebacks from
working correctly in gdb.

Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
arch/x86/kernel/kgdb.c

index eedfaeb..b1f4dff 100644 (file)
@@ -88,6 +88,7 @@ void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs)
        gdb_regs[GDB_SS]        = __KERNEL_DS;
        gdb_regs[GDB_FS]        = 0xFFFF;
        gdb_regs[GDB_GS]        = 0xFFFF;
+       gdb_regs[GDB_SP]        = (int)&regs->sp;
 #else
        gdb_regs[GDB_R8]        = regs->r8;
        gdb_regs[GDB_R9]        = regs->r9;
@@ -100,8 +101,8 @@ void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs)
        gdb_regs32[GDB_PS]      = regs->flags;
        gdb_regs32[GDB_CS]      = regs->cs;
        gdb_regs32[GDB_SS]      = regs->ss;
-#endif
        gdb_regs[GDB_SP]        = regs->sp;
+#endif
 }
 
 /**