diff options
| -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 7b5169d2b000..2ee4fa3a3f01 100644 --- a/arch/x86/kernel/kprobes.c +++ b/arch/x86/kernel/kprobes.c | |||
| @@ -60,19 +60,7 @@ void jprobe_return_end(void); | |||
| 60 | DEFINE_PER_CPU(struct kprobe *, current_kprobe) = NULL; | 60 | DEFINE_PER_CPU(struct kprobe *, current_kprobe) = NULL; |
| 61 | DEFINE_PER_CPU(struct kprobe_ctlblk, kprobe_ctlblk); | 61 | DEFINE_PER_CPU(struct kprobe_ctlblk, kprobe_ctlblk); |
| 62 | 62 | ||
| 63 | #ifdef CONFIG_X86_64 | 63 | #define stack_addr(regs) ((unsigned long *)kernel_stack_pointer(regs)) |
| 64 | #define stack_addr(regs) ((unsigned long *)regs->sp) | ||
| 65 | #else | ||
| 66 | /* | ||
| 67 | * "®s->sp" looks wrong, but it's correct for x86_32. x86_32 CPUs | ||
| 68 | * don't save the ss and esp registers if the CPU is already in kernel | ||
| 69 | * mode when it traps. So for kprobes, regs->sp and regs->ss are not | ||
| 70 | * the [nonexistent] saved stack pointer and ss register, but rather | ||
| 71 | * the top 8 bytes of the pre-int3 stack. So ®s->sp happens to | ||
| 72 | * point to the top of the pre-int3 stack. | ||
| 73 | */ | ||
| 74 | #define stack_addr(regs) ((unsigned long *)®s->sp) | ||
| 75 | #endif | ||
| 76 | 64 | ||
| 77 | #define W(row, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, ba, bb, bc, bd, be, bf)\ | 65 | #define W(row, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, ba, bb, bc, bd, be, bf)\ |
| 78 | (((b0##UL << 0x0)|(b1##UL << 0x1)|(b2##UL << 0x2)|(b3##UL << 0x3) | \ | 66 | (((b0##UL << 0x0)|(b1##UL << 0x1)|(b2##UL << 0x2)|(b3##UL << 0x3) | \ |
