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