With LOADADDR set to 0x80000000, except_vec0_r4600 and except_vec0_nevada are overwritten in trap_init() before they get installed at KSEG0. The fix is easy: diff -u -r1.53 traps.c --- arch/mips/kernel/traps.c 2001/04/08 13:24:27 1.53 +++ arch/mips/kernel/traps.c 2001/05/15 21:39:56 @@ -837,7 +837,9 @@ * Copy the EJTAG debug exception vector handler code to it's final * destination. */ +#ifdef WHONEEDSTLB memcpy((void *)(KSEG0 + 0x300), &except_vec_ejtag_debug, 0x80); +#endif /* * Only some CPUs have the watch exceptions or a dedicated OK, a kinder fix would be something like: diff -u -r1.25 head.S --- arch/mips/kernel/head.S 2001/05/04 20:43:25 1.25 +++ arch/mips/kernel/head.S 2001/05/15 21:39:40 @@ -44,7 +44,7 @@ * FIXME: Use the initcode feature to get rid of unused handler * variants. */ - .fill 0x280 + .fill 0x380 /* * This is space for the interrupt handlers. * After trap_init() they are located at virtual address KSEG0. I wonder why this never hit anybody else ... Regards, Tommy Christensen