Занятный факт о режиме probe — он «читерит»
Probe mode используется для отладки CPU Intel через JTAG. В этом режиме конвейер останавливается, и появляется возможность обозревать его полное состояние, в зависимости от уровня доступа. Грубо говоря, когда CPU полностью разлочен, в т.н. уровне «red», мы можем обозревать вообще все — знать бы только JTAG IR DR сдвиги.
Есть еще уровень «orange» для OEM, когда Intel Top Secret информация недоступна для интроспекции, но частично открыты фабрики интерконнекта, которые могут помочь интеграции IP блоков. И есть дефолтный «green», когда мы с вами, например, можем посмотреть архитектурный стейт CPU — все, что описано в Intel SDM. Это, например, удобно, если вы отлаживаете прошивки с reset вектора.
Но вот в чем подвох — JTAG очень «железный». Это значит, что манипуляции IP блоками происходят на уровне сигналов. Стало быть, если мы хотим «прошагнуть» одну макроинструкцию, мы на самом деле не можем это сделать, потому что внутри ядра целый огромный конвейер, о котором мы ничего не знаем и не должны знать. То есть JTAG может крутить самые мелкие «крутилки» в конвейере, и исполнить макроинструкцию для него — слишком сложно.
И тут врывается probe mode! Грубо говоря, при помощи него можно «попросить» конвейер полностью прокрутить одну макроинструкцию и обновить архитектурное состояние. Причем прокрутка эта происходит в «идеальных» условиях, без сторонних эффектов, которые привносили бы соседи по конвейеру. Поэтому отладка через JTAG получается не совсем «железной», а только частично, когда дело доходит до разделения микро- и макро- архитектуры. Но и волки цели, и овцы сыты.
#digest
Post #42
2.05K
- 👍 13