X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=sys%2Fsrc%2F9%2Fomap%2Ftrap.c;h=6c8021f02bfd0717f0112a3476c724df53559e73;hb=87b1d454ed703e6e93e96c40d73388d5220c1a34;hp=7fab7c778570f614c37ec1734cec7580ddcc1aa9;hpb=180e04ee41f988e707078620bae65d598c91314c;p=plan9front.git diff --git a/sys/src/9/omap/trap.c b/sys/src/9/omap/trap.c index 7fab7c778..6c8021f02 100644 --- a/sys/src/9/omap/trap.c +++ b/sys/src/9/omap/trap.c @@ -333,7 +333,7 @@ faultarm(Ureg *ureg, uintptr va, int user, int read) } insyscall = up->insyscall; up->insyscall = 1; - n = fault(va, read); + n = fault(va, ureg->pc, read); if(n < 0){ if(!user){ dumpregs(ureg); @@ -390,7 +390,7 @@ irq(Ureg* ureg) switch (irqno) { case 56: case 57: - iprint(" (I²C)"); + iprint(" (I⁲C)"); break; case 83: case 86: @@ -465,12 +465,7 @@ trap(Ureg *ureg) rem, up, ureg, ureg->pc); } - user = (ureg->psr & PsrMask) == PsrMusr; - if(user){ - up->dbgreg = ureg; - cycles(&up->kentry); - } - + user = kenter(ureg); /* * All interrupts/exceptions should be resumed at ureg->pc-4, * except for Data Abort which resumes at ureg->pc-8. @@ -589,16 +584,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\n", - 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\n", + ureg->pc); + postnote(up, 1, buf, NDebug); + } } }else{ if (ureg->pc & 3) { @@ -638,7 +639,7 @@ callwithureg(void (*fn)(Ureg*)) Ureg ureg; ureg.pc = getcallerpc(&fn); - ureg.sp = PTR2UINT(&fn); + ureg.sp = (uintptr)&fn; fn(&ureg); }