簡體   English   中英

如何在尖峰中跟蹤動態指令(在 RISC-V 上)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM