probes_opcode_t
typedef void (probes_insn_handler_t)(probes_opcode_t,
typedef void (probes_insn_singlestep_t)(probes_opcode_t,
probes_opcode_t *insn;
void __kprobes simulate_bbl(probes_opcode_t insn,
void __kprobes simulate_blx1(probes_opcode_t insn,
static void __kprobes arm_singlestep(probes_opcode_t insn,
arm_probes_decode_insn(probes_opcode_t insn, struct arch_probes_insn *asi,
void __kprobes simulate_blx2bx(probes_opcode_t insn,
void __kprobes simulate_mrs(probes_opcode_t insn,
void __kprobes simulate_mov_ipsp(probes_opcode_t insn,
void __kprobes simulate_bbl(probes_opcode_t opcode,
void __kprobes simulate_blx1(probes_opcode_t opcode,
void __kprobes simulate_blx2bx(probes_opcode_t opcode,
void __kprobes simulate_mrs(probes_opcode_t opcode,
void __kprobes simulate_mov_ipsp(probes_opcode_t opcode,
enum probes_insn arm_probes_decode_insn(probes_opcode_t,
static void __kprobes thumb16_singlestep(probes_opcode_t opcode,
static void __kprobes thumb32_singlestep(probes_opcode_t opcode,
thumb16_probes_decode_insn(probes_opcode_t insn, struct arch_probes_insn *asi,
thumb32_probes_decode_insn(probes_opcode_t insn, struct arch_probes_insn *asi,
thumb16_probes_decode_insn(probes_opcode_t insn, struct arch_probes_insn *asi,
thumb32_probes_decode_insn(probes_opcode_t insn, struct arch_probes_insn *asi,
void __kprobes probes_simulate_nop(probes_opcode_t opcode,
void __kprobes probes_emulate_none(probes_opcode_t opcode,
static probes_opcode_t __kprobes
prepare_emulated_insn(probes_opcode_t insn, struct arch_probes_insn *asi,
set_emulated_insn(probes_opcode_t insn, struct arch_probes_insn *asi,
static bool __kprobes decode_regs(probes_opcode_t *pinsn, u32 regs, bool modify)
probes_opcode_t insn = *pinsn;
probes_opcode_t mask = 0xf; /* Start at least significant nibble */
probes_opcode_t new_bits = INSN_NEW_BITS;
int action, probes_opcode_t insn,
probes_decode_insn(probes_opcode_t insn, struct arch_probes_insn *asi,
probes_opcode_t origin_insn = insn;
probes_decode_insn(probes_opcode_t insn, struct arch_probes_insn *asi,
emulate_str(probes_opcode_t insn,
emulate_rd12rn16rm0rs8_rwflags(probes_opcode_t insn,
emulate_rd12rn16rm0_rwflags_nopc(probes_opcode_t insn,
emulate_rd16rn12rm0rs8_rwflags_nopc(probes_opcode_t insn,
emulate_rd12rm0_noflags_nopc(probes_opcode_t insn,
emulate_rdlo12rdhi16rn0rm8_rwflags_nopc(probes_opcode_t insn,
emulate_ldrdstrd(probes_opcode_t insn,
emulate_ldr(probes_opcode_t insn,
emulate_generic_r2_14_noflags(probes_opcode_t insn,
emulate_ldm_r3_15(probes_opcode_t insn,
kprobe_decode_ldmstm(probes_opcode_t insn, struct arch_probes_insn *asi,
static void __kprobes simulate_ldm1stm1(probes_opcode_t insn,
static void __kprobes simulate_stm1_pc(probes_opcode_t insn,
static void __kprobes simulate_ldm1_pc(probes_opcode_t insn,
emulate_generic_r0_12_noflags(probes_opcode_t insn,
t32_simulate_ldr_literal(probes_opcode_t insn,
t32_decode_ldmstm(probes_opcode_t insn, struct arch_probes_insn *asi,
t32_emulate_ldrdstrd(probes_opcode_t insn,
t32_emulate_ldrstr(probes_opcode_t insn,
t32_emulate_rd8rn16rm0_rwflags(probes_opcode_t insn,
t32_emulate_rd8pc16_noflags(probes_opcode_t insn,
t32_simulate_table_branch(probes_opcode_t insn,
t32_emulate_rd8rn16_noflags(probes_opcode_t insn,
t32_emulate_rdlo12rdhi8rn16rm0_noflags(probes_opcode_t insn,
t16_simulate_bxblx(probes_opcode_t insn,
t16_simulate_ldr_literal(probes_opcode_t insn,
t16_simulate_ldrstr_sp_relative(probes_opcode_t insn,
t16_simulate_reladr(probes_opcode_t insn,
t16_simulate_add_sp_imm(probes_opcode_t insn,
t16_simulate_cbz(probes_opcode_t insn,
probes_opcode_t nonzero = regs->uregs[rn] ? insn : ~insn;
t16_simulate_it(probes_opcode_t insn,
t16_singlestep_it(probes_opcode_t insn,
t16_decode_it(probes_opcode_t insn, struct arch_probes_insn *asi,
t16_simulate_cond_branch(probes_opcode_t insn,
t16_decode_cond_branch(probes_opcode_t insn, struct arch_probes_insn *asi,
t16_simulate_branch(probes_opcode_t insn,
t32_simulate_mrs(probes_opcode_t insn,
t16_emulate_loregs(probes_opcode_t insn,
t16_emulate_loregs_rwflags(probes_opcode_t insn,
t16_emulate_loregs_noitrwflags(probes_opcode_t insn,
t16_emulate_hiregs(probes_opcode_t insn,
t16_decode_hiregs(probes_opcode_t insn, struct arch_probes_insn *asi,
t16_emulate_push(probes_opcode_t insn,
t32_simulate_cond_branch(probes_opcode_t insn,
t16_decode_push(probes_opcode_t insn, struct arch_probes_insn *asi,
t16_emulate_pop_nopc(probes_opcode_t insn,
t16_emulate_pop_pc(probes_opcode_t insn,
t16_decode_pop(probes_opcode_t insn, struct arch_probes_insn *asi,
t32_decode_cond_branch(probes_opcode_t insn, struct arch_probes_insn *asi,
t32_simulate_branch(probes_opcode_t insn,
static enum probes_insn arm_check_regs_normal(probes_opcode_t insn,
static enum probes_insn arm_check_regs_ldmstm(probes_opcode_t insn,
static enum probes_insn arm_check_regs_mov_ip_sp(probes_opcode_t insn,
static enum probes_insn __kprobes arm_check_stack(probes_opcode_t insn,
static enum probes_insn arm_check_regs_ldrdstrd(probes_opcode_t insn,
static enum probes_insn __kprobes arm_check_regs_nouse(probes_opcode_t insn,
enum probes_insn checker_stack_use_none(probes_opcode_t insn,
enum probes_insn checker_stack_use_unknown(probes_opcode_t insn,
enum probes_insn checker_stack_use_imm_0xx(probes_opcode_t insn,
static enum probes_insn checker_stack_use_t32strd(probes_opcode_t insn,
enum probes_insn checker_stack_use_imm_x0x(probes_opcode_t insn,
enum probes_insn checker_stack_use_imm_xxx(probes_opcode_t insn,
enum probes_insn checker_stack_use_stmdx(probes_opcode_t insn,
static enum probes_insn __kprobes t32_check_stack(probes_opcode_t insn,
static enum probes_insn __kprobes t16_check_stack(probes_opcode_t insn,
decode_pc_ro(probes_opcode_t insn, struct arch_probes_insn *asi,
decode_wb_pc(probes_opcode_t insn, struct arch_probes_insn *asi,
decode_rd12rn16rm0rs8_rwflags(probes_opcode_t insn,
decode_ldr(probes_opcode_t insn, struct arch_probes_insn *asi,
uprobe_decode_ldmstm(probes_opcode_t insn,
probes_opcode_t insn = __mem_to_opcode_arm(*pinsn);
probes_opcode_t temp;
probes_opcode_t mask;
probes_opcode_t opcode;
enum probes_insn decode_ldr(probes_opcode_t insn,
decode_rd12rn16rm0rs8_rwflags(probes_opcode_t insn,
decode_wb_pc(probes_opcode_t insn, struct arch_probes_insn *asi,
decode_pc_ro(probes_opcode_t insn, struct arch_probes_insn *asi,
enum probes_insn uprobe_decode_ldmstm(probes_opcode_t insn,