|
@@ -23,7 +23,7 @@
|
|
|
/* t32 thumb actions */
|
|
|
|
|
|
static void __kprobes
|
|
|
-t32_simulate_table_branch(kprobe_opcode_t insn,
|
|
|
+t32_simulate_table_branch(probes_opcode_t insn,
|
|
|
struct arch_specific_insn *asi, struct pt_regs *regs)
|
|
|
{
|
|
|
unsigned long pc = regs->ARM_pc;
|
|
@@ -43,7 +43,7 @@ t32_simulate_table_branch(kprobe_opcode_t insn,
|
|
|
}
|
|
|
|
|
|
static void __kprobes
|
|
|
-t32_simulate_mrs(kprobe_opcode_t insn,
|
|
|
+t32_simulate_mrs(probes_opcode_t insn,
|
|
|
struct arch_specific_insn *asi, struct pt_regs *regs)
|
|
|
{
|
|
|
int rd = (insn >> 8) & 0xf;
|
|
@@ -52,7 +52,7 @@ t32_simulate_mrs(kprobe_opcode_t insn,
|
|
|
}
|
|
|
|
|
|
static void __kprobes
|
|
|
-t32_simulate_cond_branch(kprobe_opcode_t insn,
|
|
|
+t32_simulate_cond_branch(probes_opcode_t insn,
|
|
|
struct arch_specific_insn *asi, struct pt_regs *regs)
|
|
|
{
|
|
|
unsigned long pc = regs->ARM_pc;
|
|
@@ -67,17 +67,17 @@ t32_simulate_cond_branch(kprobe_opcode_t insn,
|
|
|
}
|
|
|
|
|
|
static enum kprobe_insn __kprobes
|
|
|
-t32_decode_cond_branch(kprobe_opcode_t insn, struct arch_specific_insn *asi,
|
|
|
+t32_decode_cond_branch(probes_opcode_t insn, struct arch_specific_insn *asi,
|
|
|
const struct decode_header *d)
|
|
|
{
|
|
|
int cc = (insn >> 22) & 0xf;
|
|
|
- asi->insn_check_cc = kprobe_condition_checks[cc];
|
|
|
+ asi->insn_check_cc = probes_condition_checks[cc];
|
|
|
asi->insn_handler = t32_simulate_cond_branch;
|
|
|
return INSN_GOOD_NO_SLOT;
|
|
|
}
|
|
|
|
|
|
static void __kprobes
|
|
|
-t32_simulate_branch(kprobe_opcode_t insn,
|
|
|
+t32_simulate_branch(probes_opcode_t insn,
|
|
|
struct arch_specific_insn *asi, struct pt_regs *regs)
|
|
|
{
|
|
|
unsigned long pc = regs->ARM_pc;
|
|
@@ -105,7 +105,7 @@ t32_simulate_branch(kprobe_opcode_t insn,
|
|
|
}
|
|
|
|
|
|
static void __kprobes
|
|
|
-t32_simulate_ldr_literal(kprobe_opcode_t insn,
|
|
|
+t32_simulate_ldr_literal(probes_opcode_t insn,
|
|
|
struct arch_specific_insn *asi, struct pt_regs *regs)
|
|
|
{
|
|
|
unsigned long addr = regs->ARM_pc & ~3;
|
|
@@ -143,7 +143,7 @@ t32_simulate_ldr_literal(kprobe_opcode_t insn,
|
|
|
}
|
|
|
|
|
|
static enum kprobe_insn __kprobes
|
|
|
-t32_decode_ldmstm(kprobe_opcode_t insn, struct arch_specific_insn *asi,
|
|
|
+t32_decode_ldmstm(probes_opcode_t insn, struct arch_specific_insn *asi,
|
|
|
const struct decode_header *d)
|
|
|
{
|
|
|
enum kprobe_insn ret = kprobe_decode_ldmstm(insn, asi, d);
|
|
@@ -157,7 +157,7 @@ t32_decode_ldmstm(kprobe_opcode_t insn, struct arch_specific_insn *asi,
|
|
|
}
|
|
|
|
|
|
static void __kprobes
|
|
|
-t32_emulate_ldrdstrd(kprobe_opcode_t insn,
|
|
|
+t32_emulate_ldrdstrd(probes_opcode_t insn,
|
|
|
struct arch_specific_insn *asi, struct pt_regs *regs)
|
|
|
{
|
|
|
unsigned long pc = regs->ARM_pc & ~3;
|
|
@@ -184,7 +184,7 @@ t32_emulate_ldrdstrd(kprobe_opcode_t insn,
|
|
|
}
|
|
|
|
|
|
static void __kprobes
|
|
|
-t32_emulate_ldrstr(kprobe_opcode_t insn,
|
|
|
+t32_emulate_ldrstr(probes_opcode_t insn,
|
|
|
struct arch_specific_insn *asi, struct pt_regs *regs)
|
|
|
{
|
|
|
int rt = (insn >> 12) & 0xf;
|
|
@@ -210,7 +210,7 @@ t32_emulate_ldrstr(kprobe_opcode_t insn,
|
|
|
}
|
|
|
|
|
|
static void __kprobes
|
|
|
-t32_emulate_rd8rn16rm0_rwflags(kprobe_opcode_t insn,
|
|
|
+t32_emulate_rd8rn16rm0_rwflags(probes_opcode_t insn,
|
|
|
struct arch_specific_insn *asi, struct pt_regs *regs)
|
|
|
{
|
|
|
int rd = (insn >> 8) & 0xf;
|
|
@@ -237,7 +237,7 @@ t32_emulate_rd8rn16rm0_rwflags(kprobe_opcode_t insn,
|
|
|
}
|
|
|
|
|
|
static void __kprobes
|
|
|
-t32_emulate_rd8pc16_noflags(kprobe_opcode_t insn,
|
|
|
+t32_emulate_rd8pc16_noflags(probes_opcode_t insn,
|
|
|
struct arch_specific_insn *asi, struct pt_regs *regs)
|
|
|
{
|
|
|
unsigned long pc = regs->ARM_pc;
|
|
@@ -257,7 +257,7 @@ t32_emulate_rd8pc16_noflags(kprobe_opcode_t insn,
|
|
|
}
|
|
|
|
|
|
static void __kprobes
|
|
|
-t32_emulate_rd8rn16_noflags(kprobe_opcode_t insn,
|
|
|
+t32_emulate_rd8rn16_noflags(probes_opcode_t insn,
|
|
|
struct arch_specific_insn *asi, struct pt_regs *regs)
|
|
|
{
|
|
|
int rd = (insn >> 8) & 0xf;
|
|
@@ -277,7 +277,7 @@ t32_emulate_rd8rn16_noflags(kprobe_opcode_t insn,
|
|
|
}
|
|
|
|
|
|
static void __kprobes
|
|
|
-t32_emulate_rdlo12rdhi8rn16rm0_noflags(kprobe_opcode_t insn,
|
|
|
+t32_emulate_rdlo12rdhi8rn16rm0_noflags(probes_opcode_t insn,
|
|
|
struct arch_specific_insn *asi,
|
|
|
struct pt_regs *regs)
|
|
|
{
|
|
@@ -305,7 +305,7 @@ t32_emulate_rdlo12rdhi8rn16rm0_noflags(kprobe_opcode_t insn,
|
|
|
/* t16 thumb actions */
|
|
|
|
|
|
static void __kprobes
|
|
|
-t16_simulate_bxblx(kprobe_opcode_t insn,
|
|
|
+t16_simulate_bxblx(probes_opcode_t insn,
|
|
|
struct arch_specific_insn *asi, struct pt_regs *regs)
|
|
|
{
|
|
|
unsigned long pc = regs->ARM_pc + 2;
|
|
@@ -319,7 +319,7 @@ t16_simulate_bxblx(kprobe_opcode_t insn,
|
|
|
}
|
|
|
|
|
|
static void __kprobes
|
|
|
-t16_simulate_ldr_literal(kprobe_opcode_t insn,
|
|
|
+t16_simulate_ldr_literal(probes_opcode_t insn,
|
|
|
struct arch_specific_insn *asi, struct pt_regs *regs)
|
|
|
{
|
|
|
unsigned long *base = (unsigned long *)((regs->ARM_pc + 2) & ~3);
|
|
@@ -329,7 +329,7 @@ t16_simulate_ldr_literal(kprobe_opcode_t insn,
|
|
|
}
|
|
|
|
|
|
static void __kprobes
|
|
|
-t16_simulate_ldrstr_sp_relative(kprobe_opcode_t insn,
|
|
|
+t16_simulate_ldrstr_sp_relative(probes_opcode_t insn,
|
|
|
struct arch_specific_insn *asi, struct pt_regs *regs)
|
|
|
{
|
|
|
unsigned long* base = (unsigned long *)regs->ARM_sp;
|
|
@@ -342,7 +342,7 @@ t16_simulate_ldrstr_sp_relative(kprobe_opcode_t insn,
|
|
|
}
|
|
|
|
|
|
static void __kprobes
|
|
|
-t16_simulate_reladr(kprobe_opcode_t insn,
|
|
|
+t16_simulate_reladr(probes_opcode_t insn,
|
|
|
struct arch_specific_insn *asi, struct pt_regs *regs)
|
|
|
{
|
|
|
unsigned long base = (insn & 0x800) ? regs->ARM_sp
|
|
@@ -353,7 +353,7 @@ t16_simulate_reladr(kprobe_opcode_t insn,
|
|
|
}
|
|
|
|
|
|
static void __kprobes
|
|
|
-t16_simulate_add_sp_imm(kprobe_opcode_t insn,
|
|
|
+t16_simulate_add_sp_imm(probes_opcode_t insn,
|
|
|
struct arch_specific_insn *asi, struct pt_regs *regs)
|
|
|
{
|
|
|
long imm = insn & 0x7f;
|
|
@@ -364,11 +364,11 @@ t16_simulate_add_sp_imm(kprobe_opcode_t insn,
|
|
|
}
|
|
|
|
|
|
static void __kprobes
|
|
|
-t16_simulate_cbz(kprobe_opcode_t insn,
|
|
|
+t16_simulate_cbz(probes_opcode_t insn,
|
|
|
struct arch_specific_insn *asi, struct pt_regs *regs)
|
|
|
{
|
|
|
int rn = insn & 0x7;
|
|
|
- kprobe_opcode_t nonzero = regs->uregs[rn] ? insn : ~insn;
|
|
|
+ probes_opcode_t nonzero = regs->uregs[rn] ? insn : ~insn;
|
|
|
if (nonzero & 0x800) {
|
|
|
long i = insn & 0x200;
|
|
|
long imm5 = insn & 0xf8;
|
|
@@ -378,7 +378,7 @@ t16_simulate_cbz(kprobe_opcode_t insn,
|
|
|
}
|
|
|
|
|
|
static void __kprobes
|
|
|
-t16_simulate_it(kprobe_opcode_t insn,
|
|
|
+t16_simulate_it(probes_opcode_t insn,
|
|
|
struct arch_specific_insn *asi, struct pt_regs *regs)
|
|
|
{
|
|
|
/*
|
|
@@ -395,7 +395,7 @@ t16_simulate_it(kprobe_opcode_t insn,
|
|
|
}
|
|
|
|
|
|
static void __kprobes
|
|
|
-t16_singlestep_it(kprobe_opcode_t insn,
|
|
|
+t16_singlestep_it(probes_opcode_t insn,
|
|
|
struct arch_specific_insn *asi, struct pt_regs *regs)
|
|
|
{
|
|
|
regs->ARM_pc += 2;
|
|
@@ -403,7 +403,7 @@ t16_singlestep_it(kprobe_opcode_t insn,
|
|
|
}
|
|
|
|
|
|
static enum kprobe_insn __kprobes
|
|
|
-t16_decode_it(kprobe_opcode_t insn, struct arch_specific_insn *asi,
|
|
|
+t16_decode_it(probes_opcode_t insn, struct arch_specific_insn *asi,
|
|
|
const struct decode_header *d)
|
|
|
{
|
|
|
asi->insn_singlestep = t16_singlestep_it;
|
|
@@ -411,7 +411,7 @@ t16_decode_it(kprobe_opcode_t insn, struct arch_specific_insn *asi,
|
|
|
}
|
|
|
|
|
|
static void __kprobes
|
|
|
-t16_simulate_cond_branch(kprobe_opcode_t insn,
|
|
|
+t16_simulate_cond_branch(probes_opcode_t insn,
|
|
|
struct arch_specific_insn *asi, struct pt_regs *regs)
|
|
|
{
|
|
|
unsigned long pc = regs->ARM_pc + 2;
|
|
@@ -421,17 +421,17 @@ t16_simulate_cond_branch(kprobe_opcode_t insn,
|
|
|
}
|
|
|
|
|
|
static enum kprobe_insn __kprobes
|
|
|
-t16_decode_cond_branch(kprobe_opcode_t insn, struct arch_specific_insn *asi,
|
|
|
+t16_decode_cond_branch(probes_opcode_t insn, struct arch_specific_insn *asi,
|
|
|
const struct decode_header *d)
|
|
|
{
|
|
|
int cc = (insn >> 8) & 0xf;
|
|
|
- asi->insn_check_cc = kprobe_condition_checks[cc];
|
|
|
+ asi->insn_check_cc = probes_condition_checks[cc];
|
|
|
asi->insn_handler = t16_simulate_cond_branch;
|
|
|
return INSN_GOOD_NO_SLOT;
|
|
|
}
|
|
|
|
|
|
static void __kprobes
|
|
|
-t16_simulate_branch(kprobe_opcode_t insn,
|
|
|
+t16_simulate_branch(probes_opcode_t insn,
|
|
|
struct arch_specific_insn *asi, struct pt_regs *regs)
|
|
|
{
|
|
|
unsigned long pc = regs->ARM_pc + 2;
|
|
@@ -441,7 +441,7 @@ t16_simulate_branch(kprobe_opcode_t insn,
|
|
|
}
|
|
|
|
|
|
static unsigned long __kprobes
|
|
|
-t16_emulate_loregs(kprobe_opcode_t insn,
|
|
|
+t16_emulate_loregs(probes_opcode_t insn,
|
|
|
struct arch_specific_insn *asi, struct pt_regs *regs)
|
|
|
{
|
|
|
unsigned long oldcpsr = regs->ARM_cpsr;
|
|
@@ -464,14 +464,14 @@ t16_emulate_loregs(kprobe_opcode_t insn,
|
|
|
}
|
|
|
|
|
|
static void __kprobes
|
|
|
-t16_emulate_loregs_rwflags(kprobe_opcode_t insn,
|
|
|
+t16_emulate_loregs_rwflags(probes_opcode_t insn,
|
|
|
struct arch_specific_insn *asi, struct pt_regs *regs)
|
|
|
{
|
|
|
regs->ARM_cpsr = t16_emulate_loregs(insn, asi, regs);
|
|
|
}
|
|
|
|
|
|
static void __kprobes
|
|
|
-t16_emulate_loregs_noitrwflags(kprobe_opcode_t insn,
|
|
|
+t16_emulate_loregs_noitrwflags(probes_opcode_t insn,
|
|
|
struct arch_specific_insn *asi, struct pt_regs *regs)
|
|
|
{
|
|
|
unsigned long cpsr = t16_emulate_loregs(insn, asi, regs);
|
|
@@ -480,7 +480,7 @@ t16_emulate_loregs_noitrwflags(kprobe_opcode_t insn,
|
|
|
}
|
|
|
|
|
|
static void __kprobes
|
|
|
-t16_emulate_hiregs(kprobe_opcode_t insn,
|
|
|
+t16_emulate_hiregs(probes_opcode_t insn,
|
|
|
struct arch_specific_insn *asi, struct pt_regs *regs)
|
|
|
{
|
|
|
unsigned long pc = regs->ARM_pc + 2;
|
|
@@ -511,7 +511,7 @@ t16_emulate_hiregs(kprobe_opcode_t insn,
|
|
|
}
|
|
|
|
|
|
static enum kprobe_insn __kprobes
|
|
|
-t16_decode_hiregs(kprobe_opcode_t insn, struct arch_specific_insn *asi,
|
|
|
+t16_decode_hiregs(probes_opcode_t insn, struct arch_specific_insn *asi,
|
|
|
const struct decode_header *d)
|
|
|
{
|
|
|
insn &= ~0x00ff;
|
|
@@ -522,7 +522,7 @@ t16_decode_hiregs(kprobe_opcode_t insn, struct arch_specific_insn *asi,
|
|
|
}
|
|
|
|
|
|
static void __kprobes
|
|
|
-t16_emulate_push(kprobe_opcode_t insn,
|
|
|
+t16_emulate_push(probes_opcode_t insn,
|
|
|
struct arch_specific_insn *asi, struct pt_regs *regs)
|
|
|
{
|
|
|
__asm__ __volatile__ (
|
|
@@ -539,7 +539,7 @@ t16_emulate_push(kprobe_opcode_t insn,
|
|
|
}
|
|
|
|
|
|
static enum kprobe_insn __kprobes
|
|
|
-t16_decode_push(kprobe_opcode_t insn, struct arch_specific_insn *asi,
|
|
|
+t16_decode_push(probes_opcode_t insn, struct arch_specific_insn *asi,
|
|
|
const struct decode_header *d)
|
|
|
{
|
|
|
/*
|
|
@@ -554,7 +554,7 @@ t16_decode_push(kprobe_opcode_t insn, struct arch_specific_insn *asi,
|
|
|
}
|
|
|
|
|
|
static void __kprobes
|
|
|
-t16_emulate_pop_nopc(kprobe_opcode_t insn,
|
|
|
+t16_emulate_pop_nopc(probes_opcode_t insn,
|
|
|
struct arch_specific_insn *asi, struct pt_regs *regs)
|
|
|
{
|
|
|
__asm__ __volatile__ (
|
|
@@ -571,7 +571,7 @@ t16_emulate_pop_nopc(kprobe_opcode_t insn,
|
|
|
}
|
|
|
|
|
|
static void __kprobes
|
|
|
-t16_emulate_pop_pc(kprobe_opcode_t insn,
|
|
|
+t16_emulate_pop_pc(probes_opcode_t insn,
|
|
|
struct arch_specific_insn *asi, struct pt_regs *regs)
|
|
|
{
|
|
|
register unsigned long pc asm("r8");
|
|
@@ -592,7 +592,7 @@ t16_emulate_pop_pc(kprobe_opcode_t insn,
|
|
|
}
|
|
|
|
|
|
static enum kprobe_insn __kprobes
|
|
|
-t16_decode_pop(kprobe_opcode_t insn, struct arch_specific_insn *asi,
|
|
|
+t16_decode_pop(probes_opcode_t insn, struct arch_specific_insn *asi,
|
|
|
const struct decode_header *d)
|
|
|
{
|
|
|
/*
|