[FIX] instrumentation BL and BLX for THUMB2 05/54505/2
authorVyacheslav Cherkashin <v.cherkashin@samsung.com>
Tue, 15 Dec 2015 18:20:56 +0000 (21:20 +0300)
committerDmitry Kovalenko <d.kovalenko@samsung.com>
Fri, 18 Dec 2015 12:32:34 +0000 (04:32 -0800)
Change-Id: I7e43194c625ac725a6378ef29d20d7019e85440a
Signed-off-by: Vyacheslav Cherkashin <v.cherkashin@samsung.com>
uprobe/arch/arm/swap-asm/swap_uprobes.c
uprobe/arch/arm/swap-asm/trampoline_thumb.S
uprobe/arch/arm/swap-asm/trampoline_thumb.h

index ccd7e3c..d36f537 100644 (file)
@@ -109,6 +109,8 @@ static int arch_check_insn_thumb(unsigned long insn)
 
        /* check instructions that can change PC */
        if (THUMB_INSN_MATCH(UNDEF, insn) ||
+           THUMB2_INSN_MATCH(BLX1, insn) ||
+           THUMB2_INSN_MATCH(BL, insn) ||
            THUMB_INSN_MATCH(SWI, insn) ||
            THUMB_INSN_MATCH(BREAK, insn) ||
            THUMB2_INSN_MATCH(B1, insn) ||
@@ -550,17 +552,6 @@ static int arch_make_trampoline_thumb(unsigned long vaddr, unsigned long insn,
                *((unsigned short *)tramp + 16) = (addr & 0x0000ffff) | 0x1;
                *((unsigned short *)tramp + 17) = addr >> 16;
 
-       } else if (THUMB2_INSN_MATCH(BLX1, insn) ||
-                  THUMB2_INSN_MATCH(BL, insn)) {
-               memcpy(tramp, blx_off_insn_execbuf_thumb, tramp_len);
-               *((unsigned short *)tramp + 13) = 0xdeff;
-               addr = branch_t32_dest(insn, vaddr);
-               *((unsigned short *)tramp + 14) = (addr & 0x0000ffff);
-               *((unsigned short *)tramp + 15) = addr >> 16;
-               addr = vaddr + 4;
-               *((unsigned short *)tramp + 16) = (addr & 0x0000ffff) | 0x1;
-               *((unsigned short *)tramp + 17) = addr >> 16;
-
        } else if (THUMB_INSN_MATCH(CBZ, insn)) {
                memcpy(tramp, cbz_insn_execbuf_thumb, tramp_len);
                *((unsigned short *)tramp + 13) = 0xdeff;
index 508c440..5fee5f9 100644 (file)
@@ -89,28 +89,6 @@ bd:          nop                     // branch displacement hi
 np2:            nop                     // stored PC-4(next insn addr) hi
                 nop                     // stored PC-4(next insn addr) lo
 
-               .global blx_off_insn_execbuf_thumb
-               .align 4
-blx_off_insn_execbuf_thumb:
-                push {r0}
-                ldr r0, bd3
-                mov lr, r0
-                pop {r0}
-                blx lr
-                nop
-                push {r0,r1}
-                ldr r0, np3
-                nop
-                str r0, [sp, #4]
-                pop {r0,pc}
-                nop
-                nop                     // ssbreak
-                nop                     // retbreak
-bd3:           nop                     // branch displacement hi
-                nop                    // branch displacement lo
-np3:            nop                     // stored PC-4(next insn addr) hi
-                nop                     // stored PC-4(next insn addr) lo
-
                .global b_cond_insn_execbuf_thumb
                .align 4
 b_cond_insn_execbuf_thumb:
index e406b80..c67cbf8 100644 (file)
@@ -38,7 +38,6 @@ void gen_insn_execbuf_thumb(void);
 void pc_dep_insn_execbuf_thumb(void);
 void b_r_insn_execbuf_thumb(void);
 void b_off_insn_execbuf_thumb(void);
-void blx_off_insn_execbuf_thumb(void);
 void b_cond_insn_execbuf_thumb(void);
 void cbz_insn_execbuf_thumb(void);