[FIX] userspace instrumentation for CBZ instruction 06/18906/1
authorVasiliy Ulyanov <v.ulyanov@samsung.com>
Wed, 2 Apr 2014 14:26:56 +0000 (18:26 +0400)
committerVasiliy Ulyanov <v.ulyanov@samsung.com>
Wed, 2 Apr 2014 14:26:56 +0000 (18:26 +0400)
Change-Id: If75eb74d2299193ce3a30ad964227cbb0612b295
Signed-off-by: Vasiliy Ulyanov <v.ulyanov@samsung.com>
uprobe/arch/asm-arm/swap_uprobes.c

index 48ca993..a4c1157 100644 (file)
@@ -516,8 +516,8 @@ static int arch_copy_trampoline_thumb_uprobe(struct uprobe *up)
        } else if (THUMB_INSN_MATCH(CBZ, insn)) {
                memcpy(tramp, cbz_insn_execbuf_thumb, tramp_len);
                *((unsigned short*)tramp + 13) = 0xdeff;
-               *((unsigned short*)tramp + 0) = insn &  (~insn & 0xf8);
-               *((unsigned short*)tramp + 0) &= 0x20;
+               *((unsigned short*)tramp + 0) = insn & (~0xf8);
+               *((unsigned short*)tramp + 0) |= 0x20;
                addr = cbz_t16_dest(insn, vaddr);
                *((unsigned short*)tramp + 14) = (addr & 0x0000ffff) | 0x1;
                *((unsigned short*)tramp + 15) = addr >> 16;