刚刚读完RISCV规范,更具体地说是“第II卷:RISC-V Privileged Architectures”,并对GDB(或任何其他调试器)应该如何工作有疑问。
基本上,有两种方法可以编译标准GDB:基于硬件或基于操作系统。
一个区别是“单步指令”(si命令)-对于基于OS的操作系统,其实现方式是将软件断点(用“断点”汇编指令代替汇编指令)放在随后可能出现的每条可能的指令上(下一条汇编指令,如果当前是条件分支,则可能是另一条。忽略了可能的中断,页面错误,操作系统请求,...
对于基于硬件的GDB,没有任何隐藏的内容,因此无法使用软件“下一条指令的断点”:可能存在中断或异常,然后GDB将在该处理程序的入口处停止。
如果RISC-V应该也支持“用户模式中断”,它将有相同的问题,在用户模式下执行“单个汇编指令步骤”可能不知道下一个要替换的汇编指令是什么,GDB用户可能不想跳过/隐藏中断处理。
然后需要一些“硬件”支持来中断硬件周期计数器,就像计时器的“实时寄存器及其比较值寄存器”。