From ca6c2fcb8545d9b659826413ebd0e5c0ae2288c4 Mon Sep 17 00:00:00 2001 From: Steven Rostedt Date: Fri, 13 Jul 2012 15:44:14 -0400 Subject: [PATCH] --- yaml --- r: 339116 b: refs/heads/master c: 6c8d8b3c69cef1330e0c5cbc2a8b9268024927a0 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/arch/x86/include/asm/ptrace.h | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index ede7f82d1304..6e8cf0aeecab 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 28696f434fef0efa97534b59986ad33b9c4df7f8 +refs/heads/master: 6c8d8b3c69cef1330e0c5cbc2a8b9268024927a0 diff --git a/trunk/arch/x86/include/asm/ptrace.h b/trunk/arch/x86/include/asm/ptrace.h index dcfde52979c3..2233713d0297 100644 --- a/trunk/arch/x86/include/asm/ptrace.h +++ b/trunk/arch/x86/include/asm/ptrace.h @@ -246,6 +246,15 @@ static inline unsigned long regs_get_register(struct pt_regs *regs, { if (unlikely(offset > MAX_REG_OFFSET)) return 0; +#ifdef CONFIG_X86_32 + /* + * Traps from the kernel do not save sp and ss. + * Use the helper function to retrieve sp. + */ + if (offset == offsetof(struct pt_regs, sp) && + regs->cs == __KERNEL_CS) + return kernel_stack_pointer(regs); +#endif return *(unsigned long *)((unsigned long)regs + offset); }