[英]How to trace dynamic instruction in spike (on RISC-V)
我是尖峰和 RISC V 的新手。我正在嘗試使用尖峰進行一些動態指令跟蹤。 這些說明來自 sample.c 文件。 我嘗試了以下命令:
$ riscv64-unknown-elf-gcc simple.c -g -o simple.out
$ riscv64-unknown-elf-objdump -d --line-numbers -S simple.out
但是這些命令在輸出文件中顯示匯編指令,這不是我想要的。 我需要在運行時跟蹤動態執行的指令。 我在尖峰主機選項中只找到兩個相關命令:
-g
- 跟蹤 PC 的直方圖
-l
- 生成執行日志
我不確定結果是否符合我的預期。 有誰知道如何在尖峰中進行動態指令跟蹤? 非常感謝!
是的,您可以使用-l
調用尖峰來跟蹤所有已執行的指令。
例子:
$ 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
的尖峰以進入調試模式。 然后,您可以在程序中感興趣的第一條指令上設置斷點( until pc 0 YOURADDRESS
- 在 objdump 輸出中查找地址)並從那里單步執行(通過多次返回)。 在尖峰提示符下輸入h也可查看幫助屏幕。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.