如何跟踪尖峰中的动态指令(在 RISC-V 上)
How to trace dynamic instruction in spike (on RISC-V)
我是 spike 和 RISC V 的新手。我正在尝试使用 spike 进行一些动态指令跟踪。这些说明来自 sample.c 文件。我尝试了以下命令:
$ riscv64-unknown-elf-gcc simple.c -g -o simple.out
$ riscv64-unknown-elf-objdump -d --line-numbers -S simple.out
但是这些命令在输出文件中显示汇编指令,这不是我想要的。我需要在运行时跟踪动态执行的指令。我在 spike 主机选项中只找到两个相关命令:
-g
- 跟踪 PC 的直方图
-l
- 生成执行日志
我不确定结果是否如我所期望的那样。
有谁知道如何在 spike 中进行动态指令跟踪?
非常感谢!
是的,您可以使用 -l
调用 spike 来跟踪所有已执行的指令。
示例:
$ spike -l --isa=RV64gc ~/riscv/pk/riscv64-unknown-elf/bin/pk ./hello 2> ins.log
请注意,此跟踪还包含代理内核执行的所有指令 - 而不仅仅是您的用户程序的跟踪。
跟踪仍然有用,例如您可以搜索代码的起始地址(即在 objdump 输出中查找)并从那里使用跟踪。
此外,当您的程序调用系统调用时,您会在跟踪中看到类似这样的内容:
[.. inside your program ..]
core 0: 0x0000000000010088 (0x00000073) ecall
core 0: exception trap_user_ecall, epc 0x0000000000010088
core 0: 0x0000000080001938 (0x14011173) csrrw sp, sscratch, sp
[.. inside the pk ..]
sret
[.. inside your program ..]
这意味着您可以通过搜索下一个 sret 跳到 sycall 指令(在 pk 中执行)。
或者,您可以使用 -d
调用 spike 以进入调试模式。然后,您可以在程序中感兴趣的第一条指令上设置断点(until pc 0 YOURADDRESS
- 在 objdump 输出中查找地址)并从那里单步执行(通过多次点击 return)。另请在尖峰提示符下输入 h 查看帮助屏幕。
我是 spike 和 RISC V 的新手。我正在尝试使用 spike 进行一些动态指令跟踪。这些说明来自 sample.c 文件。我尝试了以下命令:
$ riscv64-unknown-elf-gcc simple.c -g -o simple.out
$ riscv64-unknown-elf-objdump -d --line-numbers -S simple.out
但是这些命令在输出文件中显示汇编指令,这不是我想要的。我需要在运行时跟踪动态执行的指令。我在 spike 主机选项中只找到两个相关命令:
-g
- 跟踪 PC 的直方图-l
- 生成执行日志
我不确定结果是否如我所期望的那样。 有谁知道如何在 spike 中进行动态指令跟踪? 非常感谢!
是的,您可以使用 -l
调用 spike 来跟踪所有已执行的指令。
示例:
$ spike -l --isa=RV64gc ~/riscv/pk/riscv64-unknown-elf/bin/pk ./hello 2> ins.log
请注意,此跟踪还包含代理内核执行的所有指令 - 而不仅仅是您的用户程序的跟踪。
跟踪仍然有用,例如您可以搜索代码的起始地址(即在 objdump 输出中查找)并从那里使用跟踪。
此外,当您的程序调用系统调用时,您会在跟踪中看到类似这样的内容:
[.. inside your program ..]
core 0: 0x0000000000010088 (0x00000073) ecall
core 0: exception trap_user_ecall, epc 0x0000000000010088
core 0: 0x0000000080001938 (0x14011173) csrrw sp, sscratch, sp
[.. inside the pk ..]
sret
[.. inside your program ..]
这意味着您可以通过搜索下一个 sret 跳到 sycall 指令(在 pk 中执行)。
或者,您可以使用 -d
调用 spike 以进入调试模式。然后,您可以在程序中感兴趣的第一条指令上设置断点(until pc 0 YOURADDRESS
- 在 objdump 输出中查找地址)并从那里单步执行(通过多次点击 return)。另请在尖峰提示符下输入 h 查看帮助屏幕。