From 0fbc82a9d36d524e9c9728876997f9619da5f1e8 Mon Sep 17 00:00:00 2001 From: Vasiliy Ulyanov Date: Wed, 2 Apr 2014 18:26:56 +0400 Subject: [PATCH] [FIX] userspace instrumentation for CBZ instruction Change-Id: If75eb74d2299193ce3a30ad964227cbb0612b295 Signed-off-by: Vasiliy Ulyanov --- uprobe/arch/asm-arm/swap_uprobes.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/uprobe/arch/asm-arm/swap_uprobes.c b/uprobe/arch/asm-arm/swap_uprobes.c index 48ca993..a4c1157 100644 --- a/uprobe/arch/asm-arm/swap_uprobes.c +++ b/uprobe/arch/asm-arm/swap_uprobes.c @@ -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; -- 2.7.4