SPARC одноступенчатый режим

Есть ли SPARC, эквивалентный одноступенчатому режиму x86? Я хочу остановить выполнение после каждой инструкции и переместить поток управления в обработчик прерываний или что-то подобное.

Я думал об использовании ta инструкция в слоте отложенного выполнения, но это не сработает, если предыдущая инструкция является командой ветвления с установленным битом аннулирования.

1 ответ

Решение

Sparc не хватает одного шага в PSR, поэтому сложнее одного шага. Но я использовал трюк, чтобы помочь сблизиться. Установите для TPC адрес инструкции, которую вы хотите сделать за один шаг, и установите для TNPC адрес, который находится где-то еще, где вы поместили инструкцию прерывания. Когда вы выполняете инструкцию повтора, чтобы вернуться к контексту процесса, он пошагово выполняет только одну инструкцию, которую вы хотите, затем выполняет команду trap, которая вернет вас обратно в ядро, где вы сможете делать все, что захотите. (nb это для sparc64, не уверен насчет sparc32). Это хороший трюк, потому что вам не нужно изменять существующие инструкции в адресном пространстве пользователя. Это было важно для меня, так как я выполнял пошаговые инструкции в ядре.

Другой идеей, которую я имел, но никогда не пытался, было просто установить TNPC на нелегальный адрес. Затем, после выполнения инструкции в TPC, вы получите автоматическую ловушку обратно в ядро. А поскольку код обработки прерываний знает, что процесс является одностадийным, не возникнет путаницы в отношении "реальной" незаконной ловушки адресов.

Другие вопросы по тегам