1 /* 2 * arch/arm/kernel/kprobes.h 3 * 4 * Copyright (C) 2011 Jon Medhurst <tixy@yxit.co.uk>. 5 * 6 * Some contents moved here from arch/arm/include/asm/kprobes.h which is 7 * Copyright (C) 2006, 2007 Motorola Inc. 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License version 2 as 11 * published by the Free Software Foundation. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * General Public License for more details. 17 */ 18 19 #ifndef _ARM_KERNEL_KPROBES_H 20 #define _ARM_KERNEL_KPROBES_H 21 22 #include <asm/kprobes.h> 23 #include "../decode.h" 24 25 /* 26 * These undefined instructions must be unique and 27 * reserved solely for kprobes' use. 28 */ 29 #define KPROBE_ARM_BREAKPOINT_INSTRUCTION 0x07f001f8 30 #define KPROBE_THUMB16_BREAKPOINT_INSTRUCTION 0xde18 31 #define KPROBE_THUMB32_BREAKPOINT_INSTRUCTION 0xf7f0a018 32 33 extern void kprobes_remove_breakpoint(void *addr, unsigned int insn); 34 35 enum probes_insn __kprobes 36 kprobe_decode_ldmstm(kprobe_opcode_t insn, struct arch_probes_insn *asi, 37 const struct decode_header *h); 38 39 typedef enum probes_insn (kprobe_decode_insn_t)(probes_opcode_t, 40 struct arch_probes_insn *, 41 bool, 42 const union decode_action *, 43 const struct decode_checker *[]); 44 45 #ifdef CONFIG_THUMB2_KERNEL 46 47 extern const union decode_action kprobes_t32_actions[]; 48 extern const union decode_action kprobes_t16_actions[]; 49 extern const struct decode_checker *kprobes_t32_checkers[]; 50 extern const struct decode_checker *kprobes_t16_checkers[]; 51 #else /* !CONFIG_THUMB2_KERNEL */ 52 53 extern const union decode_action kprobes_arm_actions[]; 54 extern const struct decode_checker *kprobes_arm_checkers[]; 55 56 #endif 57 58 #endif /* _ARM_KERNEL_KPROBES_H */ 59