fastcall void do_debug(struct pt_regs * regs, long error_code) 
fastcall void __kprobes do_debug(struct pt_regs * regs, long error_code) 
fastcall void do_debug(struct pt_regs * regs, long error_code){	unsigned int condition;	struct task_struct *tsk = current;	get_debugreg(condition, 6);	if (notify_die(DIE_DEBUG, "debug", regs, condition, error_code,					SIGTRAP) == NOTIFY_STOP)		return;	/* It's safe to allow irq's after DR6 has been saved */	if (regs->eflags & X86_EFLAGS_IF)		local_irq_enable();	/* Mask out spurious debug traps due to lazy DR7 setting */	if (condition & (DR_TRAP0|DR_TRAP1|DR_TRAP2|DR_TRAP3)) {		if (!tsk->thread.debugreg[7])			goto clear_dr7;	}	if (regs->eflags & VM_MASK)		goto debug_vm86;	/* Save debug status register where ptrace can see it */	tsk->thread.debugreg[6] = condition;	/*	 * Single-stepping through TF: make sure we ignore any events in	 * kernel space (but re-enable TF when returning to user mode).	 */	if (condition & DR_STEP) {		/*		 * We already checked v86 mode above, so we can		 * check for kernel mode by just checking the CPL		 * of CS.		 */		if (!user_mode(regs))			goto clear_TF_reenable;	}	/* Ok, finally something we can handle */	send_sigtrap(tsk, regs, error_code);	/* Disable additional traps. They'll be re-enabled when	 * the signal is delivered.	 */clear_dr7:	set_debugreg(0, 7);	return;debug_vm86:	handle_vm86_trap((struct kernel_vm86_regs *) regs, error_code, 1);	return;clear_TF_reenable:	set_tsk_thread_flag(tsk, TIF_SINGLESTEP);	regs->eflags &= ~TF_MASK;	return;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/3d97ae5b958855ac007b6f56a0f94ab8ade09e9e/traps.c/buggy/arch/i386/kernel/traps.c