[FIX] instrumentation for CLZ instruction 49/18949/3
authorVasiliy Ulyanov <v.ulyanov@samsung.com>
Thu, 3 Apr 2014 11:09:07 +0000 (15:09 +0400)
committerVasiliy Ulyanov <v.ulyanov@samsung.com>
Mon, 7 Apr 2014 05:18:15 +0000 (09:18 +0400)
Change-Id: I7a980d4924030225dd2dedd5a0a817a7585813d6
Signed-off-by: Vasiliy Ulyanov <v.ulyanov@samsung.com>
kprobe/arch/asm-arm/dbi_kprobes.c
kprobe/arch/asm-arm/dbi_kprobes.h

index 0ae7308..d4edf4f 100644 (file)
@@ -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) ||
index 3ce451c..704ad04 100644 (file)
@@ -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