Skip to content

Commit 5728e3e

Browse files
committed
Decode mcause in debugger
1 parent 386a483 commit 5728e3e

File tree

1 file changed

+43
-1
lines changed

1 file changed

+43
-1
lines changed

src/debugger.mlog.jinja

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,7 @@ loop__no_mark_icache:
396396
print "mcause = {0}\n"
397397
set n mcause
398398
op add ret @counter 1
399-
jump format_hex always
399+
jump format_mcause always
400400

401401
print "mtval = {0}\n"
402402
set n mtval
@@ -754,6 +754,48 @@ format_uart__rx_fifo_size__no_overrun:
754754

755755
set @counter ret
756756

757+
format_mcause:
758+
jump format_null strictEqual n null
759+
jump format_mcause__interrupt greaterThanEq n 0x80000000
760+
jump format_hex greaterThan n 19
761+
op mul jump n 2
762+
op add @counter @counter jump
763+
format "instr addr align"; set @counter ret
764+
format "instr access fault"; set @counter ret
765+
format "illegal instr"; set @counter ret
766+
format "breakpoint"; set @counter ret
767+
format "load addr align"; set @counter ret
768+
format "load access fault"; set @counter ret
769+
format "store/AMO addr align"; set @counter ret
770+
format "store/AMO access fault"; set @counter ret
771+
format "ecall from U-mode"; set @counter ret
772+
format "ecall from S-mode"; set @counter ret
773+
jump format_hex always; stop
774+
format "ecall from M-mode"; set @counter ret
775+
format "instr page fault"; set @counter ret
776+
format "load page fault"; set @counter ret
777+
jump format_hex always; stop
778+
format "store/AMO page fault"; set @counter ret
779+
jump format_hex always; stop
780+
jump format_hex always; stop
781+
format "software check"; set @counter ret
782+
format "hardware check"; set @counter ret
783+
784+
format_mcause__interrupt:
785+
op and n2 n 0x7fffffff
786+
op mod rem n2 2
787+
jump format_hex notEqual rem 1
788+
jump format_hex greaterThan n2 13
789+
op sub jump n2 1
790+
op add @counter @counter jump
791+
format "S software int"; set @counter ret
792+
format "M software int"; set @counter ret
793+
format "S timer int"; set @counter ret
794+
format "M timer int"; set @counter ret
795+
format "S external int"; set @counter ret
796+
format "M external int"; set @counter ret
797+
format "cntr overflow int"; set @counter ret
798+
757799
# creates a marker on the ram proc containing a given address
758800
# the caller should print a format string with a placeholder for the address
759801
# address ->

0 commit comments

Comments
 (0)