diff options
Diffstat (limited to 'arch/powerpc/kernel/kprobes.c')
| -rw-r--r-- | arch/powerpc/kernel/kprobes.c | 14 | 
1 files changed, 2 insertions, 12 deletions
diff --git a/arch/powerpc/kernel/kprobes.c b/arch/powerpc/kernel/kprobes.c index c533525ca56..bc47352deb1 100644 --- a/arch/powerpc/kernel/kprobes.c +++ b/arch/powerpc/kernel/kprobes.c @@ -378,17 +378,6 @@ static int __kprobes trampoline_probe_handler(struct kprobe *p,   * single-stepped a copy of the instruction.  The address of this   * copy is p->ainsn.insn.   */ -static void __kprobes resume_execution(struct kprobe *p, struct pt_regs *regs) -{ -	int ret; -	unsigned int insn = *p->ainsn.insn; - -	regs->nip = (unsigned long)p->addr; -	ret = emulate_step(regs, insn); -	if (ret == 0) -		regs->nip = (unsigned long)p->addr + 4; -} -  static int __kprobes post_kprobe_handler(struct pt_regs *regs)  {  	struct kprobe *cur = kprobe_running(); @@ -406,7 +395,8 @@ static int __kprobes post_kprobe_handler(struct pt_regs *regs)  		cur->post_handler(cur, regs, 0);  	} -	resume_execution(cur, regs); +	/* Adjust nip to after the single-stepped instruction */ +	regs->nip = (unsigned long)cur->addr + 4;  	regs->msr |= kcb->kprobe_saved_msr;  	/*Restore back the original saved kprobes variables and continue. */  |