|
@@ -214,6 +214,7 @@ intrs(Ureg *ur, int sort)
|
|
|
iprint("spurious irq%s interrupt: %8.8lux\n", irq.name, ibits);
|
|
|
s = splfhi();
|
|
|
*irq.irq &= ibits;
|
|
|
+ *irq.irqmask &= ~ibits;
|
|
|
splx(s);
|
|
|
}
|
|
|
}
|
|
@@ -479,16 +480,22 @@ trap(Ureg *ureg)
|
|
|
break;
|
|
|
case PsrMund: /* undefined instruction */
|
|
|
if(user){
|
|
|
- /* look for floating point instructions to interpret */
|
|
|
- x = spllo();
|
|
|
- rv = fpiarm(ureg);
|
|
|
- splx(x);
|
|
|
- if(rv == 0){
|
|
|
- ldrexvalid = 0;
|
|
|
- snprint(buf, sizeof buf,
|
|
|
- "undefined instruction: pc %#lux",
|
|
|
- ureg->pc);
|
|
|
+ if(seg(up, ureg->pc, 0) != nil &&
|
|
|
+ *(u32int*)ureg->pc == 0xD1200070){
|
|
|
+ snprint(buf, sizeof buf, "sys: breakpoint");
|
|
|
postnote(up, 1, buf, NDebug);
|
|
|
+ }else{
|
|
|
+ /* look for floating point instructions to interpret */
|
|
|
+ x = spllo();
|
|
|
+ rv = fpiarm(ureg);
|
|
|
+ splx(x);
|
|
|
+ if(rv == 0){
|
|
|
+ ldrexvalid = 0;
|
|
|
+ snprint(buf, sizeof buf,
|
|
|
+ "undefined instruction: pc %#lux",
|
|
|
+ ureg->pc);
|
|
|
+ postnote(up, 1, buf, NDebug);
|
|
|
+ }
|
|
|
}
|
|
|
}else{
|
|
|
iprint("undefined instruction: pc %#lux inst %#ux\n",
|