以下引用摘自 riscv-debug-spec 版本 0.132。
- 异常不会更新任何寄存器。其中包括 Cause、epc、tval、dpc 和 mstatus。 他们结束程序缓冲区的执行。
我了解例外情况不会更新上述 CSR。但是,我无法理解它是如何结束程序缓冲区的。它没有明确的定义。我应该在调试模式下将异常计为 dret 指令吗?或者我应该将异常信息发送到负责结束执行缓冲区的调试模块?
如果我理解正确的话,你想使用progbuf来访问内存或寄存器。执行完progbuf中存储的指令后,需要结束progbuf运行。对于progbuf操作,程序必须以指令ebreak结束,该指令终止progbuf程序缓冲区的执行。 ebreak是一条指令,编码为0x100073,它会中断程序的运行,以便系统将使用权交给调试器。