如何在尖峰中跟踪动态指令(在RISC-V上]

问题描述 投票:0回答:1

我是秒杀和RISC V的新手。我正在尝试对秒杀进行一些动态指令跟踪。这些说明来自sample.c文件。我已经尝试了以下命令:

$ riscv64-unknown-elf-gcc simple.c -g -o simple.out
$ riscv64-unknown-elf-objdump -d --line-numbers -S simple.out

但是这些命令将组合的指令显示在out文件中,这不是我想要的。我需要在运行时中跟踪动态执行的指令。我在秒杀主机选项中只找到两个相对命令:

  • [-g-PC的轨迹直方图

  • -l-生成执行日志

我不确定结果是否如上所述。有谁知道如何动态执行峰值跟踪?非常感谢!

runtime trace riscv spike
1个回答
0
投票

是,您可以使用-l调用秒杀以跟踪所有执行的指令。

示例:

$ spike -l --isa=RV64gc ~/riscv/pk/riscv64-unknown-elf/bin/pk ./hello 2> ins.log

请注意,此跟踪还包含代理内核执行的所有指令-而不只是用户程序的跟踪。

跟踪仍然有用,例如您可以搜索代码的起始地址(即在objdump输出中查找)并从那里使用跟踪。

此外,当您的程序调用syscall时,您会在跟踪中看到类似这样的内容:

[.. 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调用尖峰进入调试模式。然后,您可以在程序中感兴趣的第一条指令上设置一个断点(until pc 0 YOURADDRESS-在objdump输出中查找地址),然后从该位置开始执行单步操作(通过多次单击return)。通过在尖峰提示符下输入h也可以查看帮助屏幕。

© www.soinside.com 2019 - 2024. All rights reserved.