请提供各种方法来使用 Spike 模拟器生成 C 代码执行指令的跟踪。
我创建了一个简单的“Hello World”C 文件并生成了 hello.elf,然后尝试运行此命令:
/home/vindhya/riscv-vector/riscv-isa-sim/build/spike -l /home/latitude-7390/rvv64/bin/riscv64-unknown-elf/bin/pk hello.elf
在 RISC-V 架构上运行“Hello World”C 程序后获得的输出似乎不寻常。程序执行显示了涉及内存加载和分支的重复 RISC-V 指令序列,而不是预期的简单输出。
哪里可能出了问题以及如何修复错误?
这实际上取决于您如何实现“Hello World”的打印以及程序是如何编译的。从代理内核 (
pk
) 的使用来看,您很可能已将您的程序静态链接到标准 C 库(例如 newlib
)。 C 库的初始化确实涉及不平凡的指令序列。您可以通过 objdump -d
您的 ELF 程序来验证这一点,并检查程序集。