diff options
Diffstat (limited to 'arch/x86/kernel/kprobes.c')
-rw-r--r-- | arch/x86/kernel/kprobes.c | 14 |
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); | |||
63 | DEFINE_PER_CPU(struct kprobe *, current_kprobe) = NULL; | 63 | DEFINE_PER_CPU(struct kprobe *, current_kprobe) = NULL; |
64 | DEFINE_PER_CPU(struct kprobe_ctlblk, kprobe_ctlblk); | 64 | DEFINE_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 | * "®s->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 ®s->sp happens to | ||
75 | * point to the top of the pre-int3 stack. | ||
76 | */ | ||
77 | #define stack_addr(regs) ((unsigned long *)®s->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) | \ |