== NOTIFY_STOP) { 
== NOTIFY_STOP) 
__kprobes ia64_bad_break (unsigned long break_num, struct pt_regs *regs){	siginfo_t siginfo;	int sig, code;	/* break.b always sets cr.iim to 0, which causes problems for	 * debuggers.  Get the real break number from the original instruction,	 * but only for kernel code.  User space break.b is left alone, to	 * preserve the existing behaviour.  All break codings have the same	 * format, so there is no need to check the slot type.	 */	if (break_num == 0 && !user_mode(regs)) {		struct ia64_psr *ipsr = ia64_psr(regs);		unsigned long *bundle = (unsigned long *)regs->cr_iip;		unsigned long slot;		switch (ipsr->ri) {		      case 0:  slot = (bundle[0] >>  5); break;		      case 1:  slot = (bundle[0] >> 46) | (bundle[1] << 18); break;		      default: slot = (bundle[1] >> 23); break;		}		break_num = ((slot >> 36 & 1) << 20) | (slot >> 6 & 0xfffff);	}	/* SIGILL, SIGFPE, SIGSEGV, and SIGBUS want these field initialized: */	siginfo.si_addr = (void __user *) (regs->cr_iip + ia64_psr(regs)->ri);	siginfo.si_imm = break_num;	siginfo.si_flags = 0;		/* clear __ISR_VALID */	siginfo.si_isr = 0;	switch (break_num) {	      case 0: /* unknown error (used by GCC for __builtin_abort()) */		if (notify_die(DIE_BREAK, "break 0", regs, break_num, TRAP_BRKPT, SIGTRAP)			       	== NOTIFY_STOP) {			return;		}		die_if_kernel("bugcheck!", regs, break_num);		sig = SIGILL; code = ILL_ILLOPC;		break;	      case 1: /* integer divide by zero */		sig = SIGFPE; code = FPE_INTDIV;		break;	      case 2: /* integer overflow */		sig = SIGFPE; code = FPE_INTOVF;		break;	      case 3: /* range check/bounds check */		sig = SIGFPE; code = FPE_FLTSUB;		break;	      case 4: /* null pointer dereference */		sig = SIGSEGV; code = SEGV_MAPERR;		break;	      case 5: /* misaligned data */		sig = SIGSEGV; code = BUS_ADRALN;		break;	      case 6: /* decimal overflow */		sig = SIGFPE; code = __FPE_DECOVF;		break;	      case 7: /* decimal divide by zero */		sig = SIGFPE; code = __FPE_DECDIV;		break;	      case 8: /* packed decimal error */		sig = SIGFPE; code = __FPE_DECERR;		break;	      case 9: /* invalid ASCII digit */		sig = SIGFPE; code = __FPE_INVASC;		break;	      case 10: /* invalid decimal digit */		sig = SIGFPE; code = __FPE_INVDEC;		break;	      case 11: /* paragraph stack overflow */		sig = SIGSEGV; code = __SEGV_PSTKOVF;		break;	      case 0x3f000 ... 0x3ffff:	/* bundle-update in progress */		sig = SIGILL; code = __ILL_BNDMOD;		break;	      case 0x80200:	      case 0x80300:		if (notify_die(DIE_BREAK, "kprobe", regs, break_num, TRAP_BRKPT, SIGTRAP)			       	== NOTIFY_STOP) {			return;		}		sig = SIGTRAP; code = TRAP_BRKPT;		break;	      default:		if (break_num < 0x40000 || break_num > 0x100000)			die_if_kernel("Bad break", regs, break_num);		if (break_num < 0x80000) {			sig = SIGILL; code = __ILL_BREAK;		} else {			sig = SIGTRAP; code = TRAP_BRKPT;		}	}	siginfo.si_signo = sig;	siginfo.si_errno = 0;	siginfo.si_code = code;	force_sig_info(sig, &siginfo, current);}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/9138d581b0ef855c0314c41c14852a7231b9941c/traps.c/buggy/arch/ia64/kernel/traps.c