From 18d6350a735a40511666d9d727ce31b4ebdb7d89 Mon Sep 17 00:00:00 2001 From: Vasiliy Ulyanov Date: Thu, 7 Aug 2014 14:46:33 +0400 Subject: [PATCH] [FIX] x86 jumps Change-Id: Iea9f6eacb1142bd16c150c6cf6a658b9935e38a9 Signed-off-by: Vasiliy Ulyanov --- uprobe/arch/x86/swap-asm/swap_uprobes.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/uprobe/arch/x86/swap-asm/swap_uprobes.c b/uprobe/arch/x86/swap-asm/swap_uprobes.c index f4faca5..1d4ed5d 100644 --- a/uprobe/arch/x86/swap-asm/swap_uprobes.c +++ b/uprobe/arch/x86/swap-asm/swap_uprobes.c @@ -415,8 +415,14 @@ static int uprobe_handler(struct pt_regs *regs) } if (!p->pre_handler || !p->pre_handler(p, regs)) { + if (p->ainsn.boostable == 1 && !p->post_handler) { - regs->EREG(ip) = (unsigned long)p->ainsn.insn; + if (p->ss_addr[smp_processor_id()]) { + regs->EREG(ip) = (unsigned long)p->ss_addr[smp_processor_id()]; + p->ss_addr[smp_processor_id()] = NULL; + } else { + regs->EREG(ip) = (unsigned long)p->ainsn.insn; + } return 1; } -- 2.7.4