0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef _ARM_KERNEL_PROBES_ARM_H
0010 #define _ARM_KERNEL_PROBES_ARM_H
0011
0012 #include "decode.h"
0013
0014 enum probes_arm_action {
0015 PROBES_PRELOAD_IMM,
0016 PROBES_PRELOAD_REG,
0017 PROBES_BRANCH_IMM,
0018 PROBES_BRANCH_REG,
0019 PROBES_MRS,
0020 PROBES_CLZ,
0021 PROBES_SATURATING_ARITHMETIC,
0022 PROBES_MUL1,
0023 PROBES_MUL2,
0024 PROBES_SWP,
0025 PROBES_LDRSTRD,
0026 PROBES_LOAD,
0027 PROBES_STORE,
0028 PROBES_LOAD_EXTRA,
0029 PROBES_STORE_EXTRA,
0030 PROBES_MOV_IP_SP,
0031 PROBES_DATA_PROCESSING_REG,
0032 PROBES_DATA_PROCESSING_IMM,
0033 PROBES_MOV_HALFWORD,
0034 PROBES_SEV,
0035 PROBES_WFE,
0036 PROBES_SATURATE,
0037 PROBES_REV,
0038 PROBES_MMI,
0039 PROBES_PACK,
0040 PROBES_EXTEND,
0041 PROBES_EXTEND_ADD,
0042 PROBES_MUL_ADD_LONG,
0043 PROBES_MUL_ADD,
0044 PROBES_BITFIELD,
0045 PROBES_BRANCH,
0046 PROBES_LDMSTM,
0047 NUM_PROBES_ARM_ACTIONS
0048 };
0049
0050 void __kprobes simulate_bbl(probes_opcode_t opcode,
0051 struct arch_probes_insn *asi, struct pt_regs *regs);
0052 void __kprobes simulate_blx1(probes_opcode_t opcode,
0053 struct arch_probes_insn *asi, struct pt_regs *regs);
0054 void __kprobes simulate_blx2bx(probes_opcode_t opcode,
0055 struct arch_probes_insn *asi, struct pt_regs *regs);
0056 void __kprobes simulate_mrs(probes_opcode_t opcode,
0057 struct arch_probes_insn *asi, struct pt_regs *regs);
0058 void __kprobes simulate_mov_ipsp(probes_opcode_t opcode,
0059 struct arch_probes_insn *asi, struct pt_regs *regs);
0060
0061 extern const union decode_item probes_decode_arm_table[];
0062
0063 enum probes_insn arm_probes_decode_insn(probes_opcode_t,
0064 struct arch_probes_insn *, bool emulate,
0065 const union decode_action *actions,
0066 const struct decode_checker *checkers[]);
0067
0068 #endif