There is a bug in the function get_insn_opcode in traps.c
As 'epc' is an int pointer here, it should only be increased by 1 (4
byte) and not by 4 (4*4 = 16 bytes).
See the patch below.
/Carsten
Index: arch/mips/kernel/traps.c
===================================================================
RCS file: /home/repository/sw/linux-2.4.0/arch/mips/kernel/traps.c,v
retrieving revision 1.10
diff -u -r1.10 traps.c
--- traps.c 2001/02/28 13:46:43 1.10
+++ traps.c 2001/03/02 16:50:27
@@ -410,7 +410,7 @@
epc = (unsigned int *) (unsigned long) regs->cp0_epc;
if (regs->cp0_cause & CAUSEF_BD)
- epc += 4;
+ epc++;
if (verify_area(VERIFY_READ, epc, 4)) {
force_sig(SIGSEGV, current);
Index: arch/mips64/kernel/traps.c
===================================================================
RCS file: /home/repository/sw/linux-2.4.0/arch/mips64/kernel/traps.c,v
retrieving revision 1.5
diff -u -r1.5 traps.c
--- traps.c 2001/02/19 16:02:52 1.5
+++ traps.c 2001/03/02 16:50:13
@@ -371,7 +371,7 @@
epc = (unsigned int *) (unsigned long) regs->cp0_epc;
if (regs->cp0_cause & CAUSEF_BD)
- epc += 4;
+ epc++;
if (verify_area(VERIFY_READ, epc, 4)) {
force_sig(SIGSEGV, current);
--
_ _ ____ ___ Carsten Langgaard Mailto:carstenl@mips.com
|\ /|||___)(___ MIPS Denmark Direct: +45 4486 5527
| \/ ||| ____) Lautrupvang 4B Switch: +45 4486 5555
TECHNOLOGIES 2750 Ballerup Fax...: +45 4486 5556
Denmark http://www.mips.com
|