From: Vasiliy Ulyanov Date: Thu, 3 Apr 2014 11:09:07 +0000 (+0400) Subject: [FIX] instrumentation for CLZ instruction X-Git-Tag: Tizen_SDK_2.3~99 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=52d035822431856c0bca4163947d9da4d65c0caf;p=kernel%2Fswap-modules.git [FIX] instrumentation for CLZ instruction Change-Id: I7a980d4924030225dd2dedd5a0a817a7585813d6 Signed-off-by: Vasiliy Ulyanov --- diff --git a/kprobe/arch/asm-arm/dbi_kprobes.c b/kprobe/arch/asm-arm/dbi_kprobes.c index 0ae7308..d4edf4f 100644 --- a/kprobe/arch/asm-arm/dbi_kprobes.c +++ b/kprobe/arch/asm-arm/dbi_kprobes.c @@ -224,8 +224,13 @@ int arch_make_trampoline_arm(unsigned long addr, unsigned long insn, return 0; uregs = pc_dep = 0; + /* Rm */ + if (ARM_INSN_MATCH(CLZ, insn)) { + uregs = 0xa; + if (ARM_INSN_REG_RM(insn) == 15) + pc_dep = 1; /* Rn, Rm ,Rd */ - if (ARM_INSN_MATCH(DPIS, insn) || ARM_INSN_MATCH(LRO, insn) || + } else if (ARM_INSN_MATCH(DPIS, insn) || ARM_INSN_MATCH(LRO, insn) || ARM_INSN_MATCH(SRO, insn)) { uregs = 0xb; if ((ARM_INSN_REG_RN(insn) == 15) || diff --git a/kprobe/arch/asm-arm/dbi_kprobes.h b/kprobe/arch/asm-arm/dbi_kprobes.h index 3ce451c..704ad04 100644 --- a/kprobe/arch/asm-arm/dbi_kprobes.h +++ b/kprobe/arch/asm-arm/dbi_kprobes.h @@ -202,6 +202,10 @@ static inline void dbi_set_arg(struct pt_regs *regs, int num, unsigned long val) # define MASK_THUMB_INSN_BREAK 0xFF00 // 11111111xxxxxxxx # define PTRN_THUMB_INSN_BREAK 0xBE00 // 10111110xxxxxxxx +// CLZ +# define MASK_ARM_INSN_CLZ 0x0FFF0FF0 // xxxx111111111111xxxx11111111xxxx +# define PTRN_ARM_INSN_CLZ 0x016F0F10 // cccc000101101111xxxx11110001xxxx + // Data processing immediate shift # define MASK_ARM_INSN_DPIS 0x0E000010 # define PTRN_ARM_INSN_DPIS 0x00000000