semihosting-RISC-V

Инструкция по использованию semihosting в RISC-V

Теория: Вызов полухостинга имеет инструкцию EBREAK, которая останавливает ЦП при подключении отладчика Хост-ПК постоянно опрашивает встроенный ЦП, чтобы проверить, не остановлен ли он. Если хост обнаружил остановку , то он проверяет, является ли EBREAK частью специальной последовательности:

SLLI x0, x0, 0x1f

EBREAK

SRAI x0, x0, 0x07

Если последовательность обнаружена, то отладчик рассматривает EBREAK как полухостинговый вызов. Далее необходимо записать в регистры а0 и а1 номер и параметр системного вызова. (Спецификация определяет 24 вызова функций, вот некоторые из них)

Хост отладки, OpenOCD, выполняет запрошенный системный вызов полухостинга. По завершении хост отладки сохраняет возвращаемое значение в регистре a0 . Хост отладки отключает встроенный ЦП.

Практика:

Запускаем spike: spike --rbb-port=9824 print_riscv

openocd: openocd -f sp.cfg -c "arm semihosting enable"

gdb: riscv64-unknown-elf-gdb print_riscv -silent