Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f145d664 authored by David A. Long's avatar David A. Long
Browse files

ARM: Make the kprobes condition_check symbol names more generic



In preparation for sharing the ARM kprobes instruction interpreting
code with uprobes, make the symbols names less kprobes-specific.

Signed-off-by: default avatarDavid A. Long <dave.long@linaro.org>
Acked-by: default avatarJon Medhurst <tixy@linaro.org>
parent 7579f4b3
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -20,22 +20,23 @@
#define _ASM_PROBES_H

struct kprobe;
typedef u32 probes_opcode_t;

struct arch_specific_insn;
typedef void (kprobe_insn_handler_t)(kprobe_opcode_t,
typedef void (kprobe_insn_handler_t)(probes_opcode_t,
				     struct arch_specific_insn *,
				     struct pt_regs *);
typedef unsigned long (kprobe_check_cc)(unsigned long);
typedef void (kprobe_insn_singlestep_t)(kprobe_opcode_t,
typedef unsigned long (probes_check_cc)(unsigned long);
typedef void (kprobe_insn_singlestep_t)(probes_opcode_t,
					struct arch_specific_insn *,
					struct pt_regs *);
typedef void (kprobe_insn_fn_t)(void);

/* Architecture specific copy of original instruction. */
struct arch_specific_insn {
	kprobe_opcode_t			*insn;
	probes_opcode_t			*insn;
	kprobe_insn_handler_t		*insn_handler;
	kprobe_check_cc			*insn_check_cc;
	probes_check_cc			*insn_check_cc;
	kprobe_insn_singlestep_t	*insn_singlestep;
	kprobe_insn_fn_t		*insn_fn;
};
+8 −8
Original line number Diff line number Diff line
@@ -73,7 +73,7 @@
#endif

static void __kprobes
emulate_ldrdstrd(kprobe_opcode_t insn,
emulate_ldrdstrd(probes_opcode_t insn,
	struct arch_specific_insn *asi, struct pt_regs *regs)
{
	unsigned long pc = regs->ARM_pc + 4;
@@ -102,7 +102,7 @@ emulate_ldrdstrd(kprobe_opcode_t insn,
}

static void __kprobes
emulate_ldr(kprobe_opcode_t insn,
emulate_ldr(probes_opcode_t insn,
	struct arch_specific_insn *asi, struct pt_regs *regs)
{
	unsigned long pc = regs->ARM_pc + 4;
@@ -132,7 +132,7 @@ emulate_ldr(kprobe_opcode_t insn,
}

static void __kprobes
emulate_str(kprobe_opcode_t insn,
emulate_str(probes_opcode_t insn,
	struct arch_specific_insn *asi, struct pt_regs *regs)
{
	unsigned long rtpc = regs->ARM_pc - 4 + str_pc_offset;
@@ -159,7 +159,7 @@ emulate_str(kprobe_opcode_t insn,
}

static void __kprobes
emulate_rd12rn16rm0rs8_rwflags(kprobe_opcode_t insn,
emulate_rd12rn16rm0rs8_rwflags(probes_opcode_t insn,
	struct arch_specific_insn *asi, struct pt_regs *regs)
{
	unsigned long pc = regs->ARM_pc + 4;
@@ -194,7 +194,7 @@ emulate_rd12rn16rm0rs8_rwflags(kprobe_opcode_t insn,
}

static void __kprobes
emulate_rd12rn16rm0_rwflags_nopc(kprobe_opcode_t insn,
emulate_rd12rn16rm0_rwflags_nopc(probes_opcode_t insn,
	struct arch_specific_insn *asi, struct pt_regs *regs)
{
	int rd = (insn >> 12) & 0xf;
@@ -221,7 +221,7 @@ emulate_rd12rn16rm0_rwflags_nopc(kprobe_opcode_t insn,
}

static void __kprobes
emulate_rd16rn12rm0rs8_rwflags_nopc(kprobe_opcode_t insn,
emulate_rd16rn12rm0rs8_rwflags_nopc(probes_opcode_t insn,
	struct arch_specific_insn *asi,
	struct pt_regs *regs)
{
@@ -251,7 +251,7 @@ emulate_rd16rn12rm0rs8_rwflags_nopc(kprobe_opcode_t insn,
}

static void __kprobes
emulate_rd12rm0_noflags_nopc(kprobe_opcode_t insn,
emulate_rd12rm0_noflags_nopc(probes_opcode_t insn,
	struct arch_specific_insn *asi, struct pt_regs *regs)
{
	int rd = (insn >> 12) & 0xf;
@@ -271,7 +271,7 @@ emulate_rd12rm0_noflags_nopc(kprobe_opcode_t insn,
}

static void __kprobes
emulate_rdlo12rdhi16rn0rm8_rwflags_nopc(kprobe_opcode_t insn,
emulate_rdlo12rdhi16rn0rm8_rwflags_nopc(probes_opcode_t insn,
	struct arch_specific_insn *asi,
	struct pt_regs *regs)
{
+7 −7
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@
#include "kprobes.h"


static void __kprobes simulate_ldm1stm1(kprobe_opcode_t insn,
static void __kprobes simulate_ldm1stm1(probes_opcode_t insn,
		struct arch_specific_insn *asi,
		struct pt_regs *regs)
{
@@ -59,7 +59,7 @@ static void __kprobes simulate_ldm1stm1(kprobe_opcode_t insn,
	}
}

static void __kprobes simulate_stm1_pc(kprobe_opcode_t insn,
static void __kprobes simulate_stm1_pc(probes_opcode_t insn,
	struct arch_specific_insn *asi,
	struct pt_regs *regs)
{
@@ -70,7 +70,7 @@ static void __kprobes simulate_stm1_pc(kprobe_opcode_t insn,
	regs->ARM_pc = (long)addr + 4;
}

static void __kprobes simulate_ldm1_pc(kprobe_opcode_t insn,
static void __kprobes simulate_ldm1_pc(probes_opcode_t insn,
	struct arch_specific_insn *asi,
	struct pt_regs *regs)
{
@@ -79,7 +79,7 @@ static void __kprobes simulate_ldm1_pc(kprobe_opcode_t insn,
}

static void __kprobes
emulate_generic_r0_12_noflags(kprobe_opcode_t insn,
emulate_generic_r0_12_noflags(probes_opcode_t insn,
	struct arch_specific_insn *asi, struct pt_regs *regs)
{
	register void *rregs asm("r1") = regs;
@@ -107,7 +107,7 @@ emulate_generic_r0_12_noflags(kprobe_opcode_t insn,
}

static void __kprobes
emulate_generic_r2_14_noflags(kprobe_opcode_t insn,
emulate_generic_r2_14_noflags(probes_opcode_t insn,
	struct arch_specific_insn *asi, struct pt_regs *regs)
{
	emulate_generic_r0_12_noflags(insn, asi,
@@ -115,7 +115,7 @@ emulate_generic_r2_14_noflags(kprobe_opcode_t insn,
}

static void __kprobes
emulate_ldm_r3_15(kprobe_opcode_t insn,
emulate_ldm_r3_15(probes_opcode_t insn,
	struct arch_specific_insn *asi, struct pt_regs *regs)
{
	emulate_generic_r0_12_noflags(insn, asi,
@@ -124,7 +124,7 @@ emulate_ldm_r3_15(kprobe_opcode_t insn,
}

enum kprobe_insn __kprobes
kprobe_decode_ldmstm(kprobe_opcode_t insn, struct arch_specific_insn *asi,
kprobe_decode_ldmstm(probes_opcode_t insn, struct arch_specific_insn *asi,
		const struct decode_header *h)
{
	kprobe_insn_handler_t *handler = 0;
+38 −38
Original line number Diff line number Diff line
@@ -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)
{
	/*
+4 −4
Original line number Diff line number Diff line
@@ -36,22 +36,22 @@ enum kprobe_insn {
	INSN_GOOD_NO_SLOT
};

typedef enum kprobe_insn (kprobe_decode_insn_t)(kprobe_opcode_t,
typedef enum kprobe_insn (kprobe_decode_insn_t)(probes_opcode_t,
						struct arch_specific_insn *,
						const union decode_action *);

#ifdef CONFIG_THUMB2_KERNEL

enum kprobe_insn thumb16_kprobe_decode_insn(kprobe_opcode_t,
enum kprobe_insn thumb16_kprobe_decode_insn(probes_opcode_t,
					    struct arch_specific_insn *,
					    const union decode_action *);
enum kprobe_insn thumb32_kprobe_decode_insn(kprobe_opcode_t,
enum kprobe_insn thumb32_kprobe_decode_insn(probes_opcode_t,
					    struct arch_specific_insn *,
					    const union decode_action *);

#else /* !CONFIG_THUMB2_KERNEL */

enum kprobe_insn arm_kprobe_decode_insn(kprobe_opcode_t,
enum kprobe_insn arm_kprobe_decode_insn(probes_opcode_t,
					struct arch_specific_insn *,
					const union decode_action *);

Loading