static void resume_execution(struct kprobe *p, struct pt_regs *regs) 
static void __kprobes resume_execution(struct kprobe *p, struct pt_regs *regs) 
static void resume_execution(struct kprobe *p, struct pt_regs *regs){	unsigned long *tos = (unsigned long *)&regs->esp;	unsigned long next_eip = 0;	unsigned long copy_eip = (unsigned long)&p->ainsn.insn;	unsigned long orig_eip = (unsigned long)p->addr;	switch (p->ainsn.insn[0]) {	case 0x9c:		/* pushfl */		*tos &= ~(TF_MASK | IF_MASK);		*tos |= kprobe_old_eflags;		break;	case 0xc3:		/* ret/lret */	case 0xcb:	case 0xc2:	case 0xca:		regs->eflags &= ~TF_MASK;		/* eip is already adjusted, no more changes required*/		return;	case 0xe8:		/* call relative - Fix return addr */		*tos = orig_eip + (*tos - copy_eip);		break;	case 0xff:		if ((p->ainsn.insn[1] & 0x30) == 0x10) {			/* call absolute, indirect */			/* Fix return addr; eip is correct. */			next_eip = regs->eip;			*tos = orig_eip + (*tos - copy_eip);		} else if (((p->ainsn.insn[1] & 0x31) == 0x20) ||	/* jmp near, absolute indirect */			   ((p->ainsn.insn[1] & 0x31) == 0x21)) {	/* jmp far, absolute indirect */			/* eip is correct. */			next_eip = regs->eip;		}		break;	case 0xea:		/* jmp absolute -- eip is correct */		next_eip = regs->eip;		break;	default:		break;	}	regs->eflags &= ~TF_MASK;	if (next_eip) {		regs->eip = next_eip;	} else {		regs->eip = orig_eip + (regs->eip - copy_eip);	}}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/3d97ae5b958855ac007b6f56a0f94ab8ade09e9e/kprobes.c/clean/arch/i386/kernel/kprobes.c