xref: /linux/arch/arm64/kernel/probes/decode-insn.h (revision 700ea5e0e0dd70420a04e703ff264cc133834cba)
1 /*
2  * arch/arm64/kernel/probes/decode-insn.h
3  *
4  * Copyright (C) 2013 Linaro Limited.
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * General Public License for more details.
14  */
15 
16 #ifndef _ARM_KERNEL_KPROBES_ARM64_H
17 #define _ARM_KERNEL_KPROBES_ARM64_H
18 
19 #include <asm/kprobes.h>
20 
21 /*
22  * ARM strongly recommends a limit of 128 bytes between LoadExcl and
23  * StoreExcl instructions in a single thread of execution. So keep the
24  * max atomic context size as 32.
25  */
26 #define MAX_ATOMIC_CONTEXT_SIZE	(128 / sizeof(kprobe_opcode_t))
27 
28 enum probe_insn {
29 	INSN_REJECTED,
30 	INSN_GOOD_NO_SLOT,
31 	INSN_GOOD,
32 };
33 
34 #ifdef CONFIG_KPROBES
35 enum probe_insn __kprobes
36 arm_kprobe_decode_insn(kprobe_opcode_t *addr, struct arch_specific_insn *asi);
37 #endif
38 enum probe_insn __kprobes
39 arm_probe_decode_insn(probe_opcode_t insn, struct arch_probe_insn *asi);
40 
41 #endif /* _ARM_KERNEL_KPROBES_ARM64_H */
42