xref: /linux/arch/arm64/kernel/probes/decode-insn.h (revision 0cce284537fb42d9c28b9b31038ffc9b464555f5)
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 /*
20  * ARM strongly recommends a limit of 128 bytes between LoadExcl and
21  * StoreExcl instructions in a single thread of execution. So keep the
22  * max atomic context size as 32.
23  */
24 #define MAX_ATOMIC_CONTEXT_SIZE	(128 / sizeof(kprobe_opcode_t))
25 
26 enum probe_insn {
27 	INSN_REJECTED,
28 	INSN_GOOD_NO_SLOT,
29 	INSN_GOOD,
30 };
31 
32 #ifdef CONFIG_KPROBES
33 enum probe_insn __kprobes
34 arm_kprobe_decode_insn(kprobe_opcode_t *addr, struct arch_specific_insn *asi);
35 #endif
36 enum probe_insn __kprobes
37 arm_probe_decode_insn(probe_opcode_t insn, struct arch_probe_insn *asi);
38 
39 #endif /* _ARM_KERNEL_KPROBES_ARM64_H */
40