*** ../linux-avtrex/linux/arch/mips/kernel/traps.c 2004-02-26 11:14:09.000000000 -0800 --- arch/mips/kernel/traps.c 2004-06-11 14:04:52.000000000 -0700 *************** *** 38,43 **** --- 38,44 ---- #include #include #include + #include extern asmlinkage void handle_mod(void); extern asmlinkage void handle_tlbl(void); *************** *** 597,615 **** * There is the ancient bug in the MIPS assemblers that the break * code starts left to bit 16 instead to bit 6 in the opcode. * Gas is bug-compatible ... ! */ ! bcode = ((opcode >> 16) & ((1 << 20) - 1)); ! ! /* * (A short test says that IRIX 5.3 sends SIGTRAP for all break * insns, even for break codes that indicate arithmetic failures. * Weird ...) * But should we continue the brokenness??? --macro */ switch (bcode) { ! case 6: ! case 7: ! if (bcode == 7) info.si_code = FPE_INTDIV; else info.si_code = FPE_INTOVF; --- 598,622 ---- * There is the ancient bug in the MIPS assemblers that the break * code starts left to bit 16 instead to bit 6 in the opcode. * Gas is bug-compatible ... ! * * (A short test says that IRIX 5.3 sends SIGTRAP for all break * insns, even for break codes that indicate arithmetic failures. * Weird ...) * But should we continue the brokenness??? --macro + * + * It seems some assemblers (binutils-2.15 for example) assemble + * break correctly. So we check for the break code in either + * position. + * */ + + bcode = ((opcode >> 6) & ((1 << 20) - 1)); switch (bcode) { ! case BRK_OVERFLOW: ! case BRK_DIVZERO: ! case BRK_OVERFLOW << 10: ! case BRK_DIVZERO << 10: ! if (bcode == BRK_DIVZERO || bcode == (BRK_DIVZERO << 10)) info.si_code = FPE_INTDIV; else info.si_code = FPE_INTOVF; *************** *** 633,639 **** /* Immediate versions don't provide a code. */ if (!(opcode & OPCODE)) ! tcode = ((opcode >> 6) & ((1 << 20) - 1)); /* * (A short test says that IRIX 5.3 sends SIGTRAP for all trap --- 640,646 ---- /* Immediate versions don't provide a code. */ if (!(opcode & OPCODE)) ! tcode = ((opcode >> 6) & ((1 << 10) - 1)); /* * (A short test says that IRIX 5.3 sends SIGTRAP for all trap