diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-01-25 14:48:57 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2013-01-25 14:48:57 +0100 |
commit | 180e04ee41f988e707078620bae65d598c91314c (patch) | |
tree | 2fe41ce2cdd1610a89c62f9f68475794f4d989dc /sys/src/9/omap/trap.c | |
parent | 358f72266a774d291c3b9c569b29152ca5595ee7 (diff) |
omap: fix breakpoint instruction trap handling (from sources)
Diffstat (limited to 'sys/src/9/omap/trap.c')
-rw-r--r-- | sys/src/9/omap/trap.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/sys/src/9/omap/trap.c b/sys/src/9/omap/trap.c index 2a97b71c5..7fab7c778 100644 --- a/sys/src/9/omap/trap.c +++ b/sys/src/9/omap/trap.c @@ -493,7 +493,23 @@ trap(Ureg *ureg) break; case PsrMabt: /* prefetch fault */ ldrexvalid = 0; - faultarm(ureg, ureg->pc, user, 1); + x = ifsrget(); + fsr = (x>>7) & 0x8 | x & 0x7; + switch(fsr){ + case 0x02: /* instruction debug event (BKPT) */ + if(user){ + snprint(buf, sizeof buf, "sys: breakpoint"); + postnote(up, 1, buf, NDebug); + }else{ + iprint("kernel bkpt: pc %#lux inst %#ux\n", + ureg->pc, *(u32int*)ureg->pc); + panic("kernel bkpt"); + } + break; + default: + faultarm(ureg, ureg->pc, user, 1); + break; + } break; case PsrMabt+1: /* data fault */ ldrexvalid = 0; |