aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/kprobes.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/x86/kernel/kprobes.c')
-rw-r--r--arch/x86/kernel/kprobes.c14
1 files changed, 1 insertions, 13 deletions
diff --git a/arch/x86/kernel/kprobes.c b/arch/x86/kernel/kprobes.c
index 3fe86d706a14..1f3186ce213c 100644
--- a/arch/x86/kernel/kprobes.c
+++ b/arch/x86/kernel/kprobes.c
@@ -63,19 +63,7 @@ void jprobe_return_end(void);
63DEFINE_PER_CPU(struct kprobe *, current_kprobe) = NULL; 63DEFINE_PER_CPU(struct kprobe *, current_kprobe) = NULL;
64DEFINE_PER_CPU(struct kprobe_ctlblk, kprobe_ctlblk); 64DEFINE_PER_CPU(struct kprobe_ctlblk, kprobe_ctlblk);
65 65
66#ifdef CONFIG_X86_64 66#define stack_addr(regs) ((unsigned long *)kernel_stack_pointer(regs))
67#define stack_addr(regs) ((unsigned long *)regs->sp)
68#else
69/*
70 * "&regs->sp" looks wrong, but it's correct for x86_32. x86_32 CPUs
71 * don't save the ss and esp registers if the CPU is already in kernel
72 * mode when it traps. So for kprobes, regs->sp and regs->ss are not
73 * the [nonexistent] saved stack pointer and ss register, but rather
74 * the top 8 bytes of the pre-int3 stack. So &regs->sp happens to
75 * point to the top of the pre-int3 stack.
76 */
77#define stack_addr(regs) ((unsigned long *)&regs->sp)
78#endif
79 67
80#define W(row, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, ba, bb, bc, bd, be, bf)\ 68#define W(row, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, ba, bb, bc, bd, be, bf)\
81 (((b0##UL << 0x0)|(b1##UL << 0x1)|(b2##UL << 0x2)|(b3##UL << 0x3) | \ 69 (((b0##UL << 0x0)|(b1##UL << 0x1)|(b2##UL << 0x2)|(b3##UL << 0x3) | \