我正在上2023年版课程的陷阱讲座。按照 here 的说明,我可以
stepi
进入 ecall 指令并查看跳转到 trapframe 的情况。
这似乎没有发生,它自动跳转到
ret
。 这个答案提出了同样的问题,解决方案建议使用newlib版本的riscv64编译器。
因此,我安装了
binutils-riscv64-unknown-elf_2.34-0ubuntu1_amd64.deb
和 gcc-riscv64-unknown-elf_10.2.0-0ubuntu1_amd64.deb
软件包,它们为我提供了带有 newlib 支持的 riscv64-unknown-elf-gcc (较新的版本似乎是使用 --without-newlib
标志构建的)
但是,在运行
gdb-multiarch
时,我仍然无法进入ecall函数。我使用的是 Ubuntu 24.04 LTS。这与 ubuntu 有关,还是我使用 gdb-multiarch 而不是 riscv64-unknown-elf-gdb
有关?由于某种原因,我似乎无法在网上找到这个,而且我的系统太脆弱,无法构建任何二进制文件,因此找到这个的任何线索都会有所帮助。
我不知道为什么不能stepi它,但是你可以通过'b *$stvec'设置其他断点来解决它