SPARC одноступенчатый режим - PullRequest
0 голосов
/ 16 сентября 2018

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

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

1 Ответ

0 голосов
/ 17 сентября 2018

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

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

...