1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
2 | /* |
3 | * arch/arm/probes/decode-arm.h |
4 | * |
5 | * Copyright 2013 Linaro Ltd. |
6 | * Written by: David A. Long |
7 | */ |
8 | |
9 | #ifndef _ARM_KERNEL_PROBES_ARM_H |
10 | #define _ARM_KERNEL_PROBES_ARM_H |
11 | |
12 | #include "decode.h" |
13 | |
14 | enum probes_arm_action { |
15 | PROBES_PRELOAD_IMM, |
16 | PROBES_PRELOAD_REG, |
17 | PROBES_BRANCH_IMM, |
18 | PROBES_BRANCH_REG, |
19 | PROBES_MRS, |
20 | PROBES_CLZ, |
21 | PROBES_SATURATING_ARITHMETIC, |
22 | PROBES_MUL1, |
23 | PROBES_MUL2, |
24 | PROBES_SWP, |
25 | PROBES_LDRSTRD, |
26 | PROBES_LOAD, |
27 | PROBES_STORE, |
28 | , |
29 | , |
30 | PROBES_MOV_IP_SP, |
31 | PROBES_DATA_PROCESSING_REG, |
32 | PROBES_DATA_PROCESSING_IMM, |
33 | PROBES_MOV_HALFWORD, |
34 | PROBES_SEV, |
35 | PROBES_WFE, |
36 | PROBES_SATURATE, |
37 | PROBES_REV, |
38 | PROBES_MMI, |
39 | PROBES_PACK, |
40 | PROBES_EXTEND, |
41 | PROBES_EXTEND_ADD, |
42 | PROBES_MUL_ADD_LONG, |
43 | PROBES_MUL_ADD, |
44 | PROBES_BITFIELD, |
45 | PROBES_BRANCH, |
46 | PROBES_LDMSTM, |
47 | NUM_PROBES_ARM_ACTIONS |
48 | }; |
49 | |
50 | void __kprobes simulate_bbl(probes_opcode_t opcode, |
51 | struct arch_probes_insn *asi, struct pt_regs *regs); |
52 | void __kprobes simulate_blx1(probes_opcode_t opcode, |
53 | struct arch_probes_insn *asi, struct pt_regs *regs); |
54 | void __kprobes simulate_blx2bx(probes_opcode_t opcode, |
55 | struct arch_probes_insn *asi, struct pt_regs *regs); |
56 | void __kprobes simulate_mrs(probes_opcode_t opcode, |
57 | struct arch_probes_insn *asi, struct pt_regs *regs); |
58 | void __kprobes simulate_mov_ipsp(probes_opcode_t opcode, |
59 | struct arch_probes_insn *asi, struct pt_regs *regs); |
60 | |
61 | extern const union decode_item probes_decode_arm_table[]; |
62 | |
63 | enum probes_insn arm_probes_decode_insn(probes_opcode_t, |
64 | struct arch_probes_insn *, bool emulate, |
65 | const union decode_action *actions, |
66 | const struct decode_checker *checkers[]); |
67 | |
68 | #endif |
69 | |