Юрий, а можете подробнее рассказать, как просходит отладка? Вот как устанавливается и как срабатывает брейкпоинт? Чип, что, при включении формирует массив векторов прерываний?
Честно говоря, лень регистрироваться, спрашиваю в основном из любопытства. У меня тогда ещё пара вопросов. То есть, видимо, когда брекпоинт срабатывает, генерируется некое прерывание. А таблица прерываний создаётся самим процессором при загрузке? А решим отладки заключается в переписывании соответствующего вектора прерывания? И ещё, как адресуется память? У Intel много хитрых механизмов для разных режимов, в частности, трансляция виртуальных адресов в реальные и поддержка пейджинга.
По брейкпойнту возникает прерывание типа debug exception. Адрес текущей команды сохраняется в специальном регистре DEPC, процессор переключается в режим отладки и прыгает на адрес 0xFF200000. Это так называемый сегмент отладки, диапазон адресов, который появляется только в режиме отладки. Все запросы от процессора к сегменту отладки аппаратно переадресуются к JTAG-адаптеру. То есть софт на управляющем компьютере (отладчик GDB или другой) начинает кормить отлаживаемый процессор нужными инструкциями MIPS, чтобы получить от него содержимое регистров, памяти и др. Под конец отладчик выдает инструкцию DRET, и процессор переходит в обычный режим, продолжая выполнение с адреса в регистре DEPC
( ... )
Reply
Reply
Reply
(The comment has been removed)
Reply
(The comment has been removed)
Reply
Я могу рассказать с любой степенью подробности, если вы будете задавать уточняющие вопросы.
Reply
И ещё, как адресуется память? У Intel много хитрых механизмов для разных режимов, в частности, трансляция виртуальных адресов в реальные и поддержка пейджинга.
Reply
Reply
Reply
Leave a comment