Как отследить динамическую c инструкцию в пике (по RIS C -V) - PullRequest
0 голосов
/ 19 марта 2020

Я новичок в Spike и RIS C V. Я пытаюсь выполнить динамическую c трассировку инструкций с помощью Spike. Эти инструкции взяты из образца файла c. Я пробовал следующие команды:

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

Но эти команды отображают собранные инструкции в выходной файл, который не я хочу. Мне нужно отследить динамическую c выполненную инструкцию во время выполнения. Я нахожу только две относительные команды в опции хоста Spike:

  • -g - отслеживать гистограмму ПК

  • -l - генерировать журнал выполнения

Я не уверен, что результат, как я ожидал, как указано выше. У кого-нибудь есть идеи, как сделать динамическую трассировку инструкций c в spike? Большое спасибо!

1 Ответ

0 голосов
/ 21 марта 2020

Да, вы можете вызвать spike с помощью -l, чтобы получить трассировку всех выполненных инструкций.

Пример:

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

Обратите внимание, что эта трасса также содержит все инструкции, выполненные proxy-kernel - а не просто трассировка вашей пользовательской программы.

Трассировка все еще может быть полезна, например, вы можете искать начальный адрес вашего кода (т.е. искать его в выводе 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 ..]

Это означает, что вы можете пропустить инструкцию sycall (которая выполняется в pk) путем поиска следующего sret.

Кроме того, вы можете вызвать spike с помощью -d, чтобы войти в режим отладки. Затем вы можете установить точку останова для первой интересующей вас инструкции в вашей программе (until pc 0 YOURADDRESS - найдите адрес в выводе objdump) и сделать один шаг оттуда (нажав несколько раз return). См. Также экран справки, введя h в приглашении всплеска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...