|
@@ -86,9 +86,15 @@ void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs)
|
|
|
gdb_regs[GDB_DS] = regs->ds;
|
|
|
gdb_regs[GDB_ES] = regs->es;
|
|
|
gdb_regs[GDB_CS] = regs->cs;
|
|
|
- gdb_regs[GDB_SS] = __KERNEL_DS;
|
|
|
gdb_regs[GDB_FS] = 0xFFFF;
|
|
|
gdb_regs[GDB_GS] = 0xFFFF;
|
|
|
+ if (user_mode_vm(regs)) {
|
|
|
+ gdb_regs[GDB_SS] = regs->ss;
|
|
|
+ gdb_regs[GDB_SP] = regs->sp;
|
|
|
+ } else {
|
|
|
+ gdb_regs[GDB_SS] = __KERNEL_DS;
|
|
|
+ gdb_regs[GDB_SP] = kernel_stack_pointer(regs);
|
|
|
+ }
|
|
|
#else
|
|
|
gdb_regs[GDB_R8] = regs->r8;
|
|
|
gdb_regs[GDB_R9] = regs->r9;
|
|
@@ -101,8 +107,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] = kernel_stack_pointer(regs);
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
/**
|