]> err.no Git - linux-2.6/blobdiff - arch/arm/kernel/kprobes.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
[linux-2.6] / arch / arm / kernel / kprobes.c
index a18a8458e99d209491de06dcadb55d6223db1ee0..13e371aad8792686df6fee77d0642fa3030f8a69 100644 (file)
 #include <asm/traps.h>
 #include <asm/cacheflush.h>
 
-/*
- * This undefined instruction must be unique and
- * reserved solely for kprobes' use.
- */
-#define KPROBE_BREAKPOINT_INSTRUCTION  0xe7f001f8
-
 #define MIN_STACK_SIZE(addr)                           \
        min((unsigned long)MAX_STACK_SIZE,              \
            (unsigned long)current_thread_info() + THREAD_START_SP - (addr))
@@ -55,7 +49,7 @@ int __kprobes arch_prepare_kprobe(struct kprobe *p)
        unsigned long addr = (unsigned long)p->addr;
        int is;
 
-       if (addr & 0x3)
+       if (addr & 0x3 || in_exception_text(addr))
                return -EINVAL;
 
        insn = *p->addr;
@@ -206,7 +200,7 @@ void __kprobes kprobe_handler(struct pt_regs *regs)
        }
 }
 
-static int kprobe_trap_handler(struct pt_regs *regs, unsigned int instr)
+int kprobe_trap_handler(struct pt_regs *regs, unsigned int instr)
 {
        kprobe_handler(regs);
        return 0;
@@ -437,6 +431,11 @@ int __kprobes longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)
        return 0;
 }
 
+int __kprobes arch_trampoline_kprobe(struct kprobe *p)
+{
+       return 0;
+}
+
 static struct undef_hook kprobes_break_hook = {
        .instr_mask     = 0xffffffff,
        .instr_val      = KPROBE_BREAKPOINT_INSTRUCTION,