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