ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы.


Продажа малька купить малька.

 

Часть 12

Глава 11  Отладка
-----------------------------------------------------------------
Процессор i486 обеспечивает расширенные отладочные средства,
которые в частности полезны для разработки сложных программных
систем, таких как мультизадачные операционные системы. Условия
сбоя для этих программных систем могут быть очень сложными и
зависимыми от времени. Отладочные средства процессора i486
предоставляют системному программисту мощный инструмент
просмотра динамического состояния процессора.
Отладка поддерживается посредством отладочных регистров. Они
содержат адреса точек памяти, называемых контрольными точками
(точками останова), которые запускают отладочное программное
обеспечение. При выполнении операции с памятью по одному из этих
адресов генерируется исключение. Контрольная точка задается для
конкретной формы доступа к памяти, например выборки команды или
операции записи двойного слова. Отладочные регистры поддерживают
как контрольные точки команд, так и контрольные точки данных.
Для других процессоров контрольные точки команд устанавливаются
заменой нормальных команд командами контрольных точек. При
выполнении команды контрольной точки вызывается отладчик. Однако
в случае отладочных регистров процессора i486 это не
обязательно. Исключая необходимость записи в пространство кода,
процесс отладки упрощается (не требуется установка отображения
сегментов данных в ту же область памяти, что и кодовый сегмент),
и контрольные точки могут устанавливаться в ПЗУ -резидентном
программном обеспечении. Кроме того, контрольные точки могут
быть установлены для чтения и записи данных, что позволяет
контролировать состояние данных в режиме реального времени.
11.1  Поддержка отладки
-----------------------------------------------------------------
В число средств архитектуры, поддерживающих отладку, входят:
- Резервируемый отладочный вектор прерывания - задает процедуру
  или задачу, когда происходит событие, важное для отладчика.
- Отладочные адресные регистры - задают адреса до четырех
  контрольных точек.
- Отладочный управляющий регистр - задает формы доступа к памяти
  для контрольных точек.
- Отладочный регистр состояния - сообщает об условиях, которые
  существовали в момент генерации исключения.
- Бит ловушки в TSS (T-бит) - генерирует отладочное исключение
  при попытке выполнить переключение задачи на задачу, для
  которой этот бит был установлен.
- Флаг возобновления (RF) - подавляет возобновление
  множественных исключений для одной и той же команды.
- Флаг ловушки (TF) - генерирует отладочное исключение после
  каждого выполнения команды.
- Команда контрольной точки - Вызывает отладчик (генерирует
  отладочное исключение. Данная команда является альтернативным
  способом установки контрольных точек в коде. Она особенно
  полезна, когда желательно иметь более четырех контрольных точек
  либо при помещении контрольных точек в исходный код.
- Резервируемый вектор прерывания для исключения контрольной
  точки - вызывает процедуру или задачу при выполнении команды
  контрольной точки.
Эти средства позволяют вызывать отладчик как отдельную задачу
или процедуру в контексте текущей задачи. Для вызова отладчика
могут быть использованы следующие условия:
     - Переключение на конкретную задачу.
     - Выполнение команды контрольной точки.
     - Выполнение любой команды.
     - Выполнение команды по заданному адресу.
     - Чтение или запись  байта,  слова  или  двойного  слова  по
       конкретному заданному адресу.
     - Запись  в  байт,  слово  или  двойное  слово  по заданному
       адресу.
     - Попытка изменить содержимое отладочного регистра.
11.2  Отладочные регистры
-----------------------------------------------------------------
Для управления отладкой используется шесть регистров. Доступ к
этим регистрам выполняется с помощью разновидностей команды MOV.
Отладочный регистр может быть исходным операндом или операндом
назначения этих команд. Отладочные регистры относятся к
привилегированным ресурсам; команды MOV могут обращаться к ним
только на уровне привилегированности 0. Попытка чтения или
записи в отладочные регистры с других уровней
привилегированности генерирует исключение общей защиты. На
Рисунке 11-1 показан формат отладочных регистров.
11.2.1  Отладлчные адресные регистры (DR0-DR3)
-----------------------------------------------------------------
Каждый из этих регистров содержит линейный адрес одной из
четырех контрольных точек. При разрешенной подкачке страниц эти
адреса транслируются в физические адреса по алгоритму подкачки
страниц. Условие каждой контрольной точки определяется
содержимым регистра DR7.
11.2.2  Отладочный управляющий регистр (DR7)
-----------------------------------------------------------------
Показанный на Рисунке 11-1 отладочный управляющий регистр задает
вид доступа к памяти, связанный с каждой контрольной точкой.
Каждый адрес в регистрах DR0 - DR3 соответствует полю R/W0 -
R/W3 в регистре DR7. процессор интерпретирует их следующим
образом:
     00 - Прерывание только при выполнении команды
     00 - Прерывание только при записи данных
     10 - не определено
     11 -  прерывание  при  чтении  и  записи  данных,  но не при
           выборке команды
                   Отладочные регистры
 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
-----------------------------------------------------------------
| L | R | L | R | L | R | L | R |           | | | | | | | | | | |
| E | / | E | / | E | / | E | / |0 0 0 0 0 0|G|L|G|L|G|L|G|L|G|L|
DR7
| N | W | N | W | N | W | N | W |           |E|E|3|3|2|2|1|1|0|0|
| 3 | 3 | 2 | 2 | 1 | 1 | 0 | 0 |           | | | | | | | | | | |
|---------------------------------------------------------------|
|0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0|B|B|B|0 0 0 0 0 0 0 0 0|B|B|B|B|
DR6
|                               |T|S|D|                 |3|2|1|0|
|---------------------------------------------------------------|
|                       Зарезервировано                         |
DR5
|---------------------------------------------------------------|
|                       Зарезервировано                         |
DR5
|---------------------------------------------------------------|
|                Физический адрес контрольной точки 3           |
|---------------------------------------------------------------|
|                Физический адрес контрольной точки 2           |
|---------------------------------------------------------------|
|                Физический адрес контрольной точки 1           |
|---------------------------------------------------------------|
|                Физический адрес контрольной точки 0           |
-----------------------------------------------------------------
  Биты, помеченные как 0, зарезервированы. Не используйте их.
               Рисунок 11-1. Отладочные регистры
Поля LEN0 - LEN3 регистра DR7 задат размер позиции памяти, для
которой установлены контрольные точки. Может быть задан размер в
1, 2 или 4 байта. Поля длины интерпретируются следующим образом:
     00 - доина один байт
     01 - длина два байта
     10 - не определено
     11 - длина четыре байта
Если RWn равно 00 (выполнение команды), то LENn должно быть
равно 00. Эффект при использовании любой другой длины
неопределен.
Младшие восемь битов регистра DR7 (поля от L0 до L3 и G0 до G3)
по отдельности разрешают условия контрольных точек в четырех
адресах. Существует два уровня их разрешения: локальный (от L0
до L3) и глобальный (от G0 до G3). Локальные биты разрешения
автоматически очищаются процессором при каждом переключении
задачи, чтобы избежать нежелательных условий контрольных точек в
новой задаче. Они используются для установки контрольных точек в
одной отдельной задаче. Глобальные биты разрешения при
переключении задачи не очищаются. Они используются для
разрешения условий контрольной точки, применимых ко всем
задачам.
Процессор i486 всегда использует при отладке точное совпадение
для контрольных точек данных. То есть, если какие-либо из битов
Ln/Gn установлены, то процессор замедляет выполнение таким
образом, что сообщение о контрольной точке данных выдается
именно для той команды, которая вызвала срабатывание данной
контрольной точки, а не для следующей выполняемой команды. В
таком случае одно-тактовые команды, выполняющие доступ к памяти,
будут занимать два тактовых цикла.
Для процессора 386 DX точное совпадение для контрольных точек
данных не происходит, если его не разрешить установкой бита LE
или GE. Процессор i486 эти биты игнорирует.
11.2.3  Отладочный регистр состояния (DR6)
-----------------------------------------------------------------
Показанный на Рисунке 11-1 отладочный регистр состояния сообщает
об условиях, выявленных во время генерирования отладочного
исключения. Среди прочей информации, он сообщает, какая
контрольная точки вызвала данное исключение.
Когда разрешенная контрольная точка генерирует исключение
отладки, она загружает младшие четыре бита данного регистра (от
B0 до B3), прежде чем войти в обработчик отладочных исключений.
Бит B устанавливается, если условие, описанное битами DR, LEN и
R/w истинно, даже если эта контрольная точка не разрешена битами
L и G. Процессор устанавливает биты B для всех контрольных
точек, для которых выполняются условия, установленные в момент
генерации отладочного исключения, независимо от того, были ли
они разрешены.
Бит BT связан с битом Т (отладочным битом ловушки) в TSS (формат
TSS см. в Главе 6). Процессор устанавливает бит BT перед входом
в отладочный обработчик исключений, если переключение произошло
на задачу с установленным битом T в TSS. В регистре DR7 не
существует бита, позволяющего разрешить или запретить данное
исключение, бит Т в TSS является единственным разрешающим битом.
Бит BS связан с флагом TF. Бит BS устанавливается, если
отладочное исключение произошло при пошаговом режиме выполнения
(при установленном флаге TF). Пошаговый режим выполнения дает
отладочное исключение с наивысшим приоритетом; когда бит BS
установлен, любые прочие биты состояния отладки также могут быть
установлены.
Бит BD установлен, если следующая команда будет читать или
записывать один из восьми отладочных регистров, в то время как
они используются встроенным эмулятором.
Отметим, что содержимое регистра DR6 никогда не очищается
процессором. Чтобы избежать путаницы с идентификацией отладочных
исключений, отладочный обработчик исключений должен перед
возвратом очищать этот регистр.
11.2.4  Распознавание поля контрольной точки
-----------------------------------------------------------------
Адрес и биты LEN для каждого из четырех условий контрольной
точки определяют диапазон последовательных адресов байтов для
контрольной точки данных. Биты LEN позволяют задание одно-,
двухи четырех-байтового диапазона. Двух-байтовые диапазоны
должны быть выравнены по границе слова (адреса, кратные двум), а
четырех-байтовые диапазоны должны быть выравнены по границе
двойного слова (адреса, кратные четырем). Эти требования
принудительно устанавливаются процессором; он использует биты
LEN для маскирования младших адресных битов в отладочных
регистрах. Невыравненные адреса контрольных точек кода или
данных не дадут ожидаемых результатов.
Контрольная точка данных на чтение или запись срабатывает, когда
любые из байтов, участвующих в операции доступа к памяти,
находятся в диапазоне, определенном адресным регистром
контрольной точки и его битами длины LEN. В Таблице 11-1
приводится несколько примеров комбинаций адресов и полей со
ссылками к памяти, вызывающие и не вызывающие срабатывание
ловушки.
Контрольные точки данных для невыравненного операнда могут быть
составлены из двух наборов элементов в регистрах контрольной
точки, где каждый отдельный элемент выравнен по границе байта, а
два элемента вместе покрывают весь нужный операнд. Такая
контрольная точка генерирует исключения только для операнда, но
не для каких-либо соседних байтов.
Адреса контрольных точек для команд должны иметь заданную длину
в один байт (LEN = 00); поведение таких контрольных точек в
случае других размеров операнда неопределено. Процессор
распознает адрес контрольной точки команды только когда он
указывает на первый байт команды. Если команда имеет какие-либо
префиксы, адрес контрольной точки должен указывать на первый
префикс.
            Таблица 11-1. Примеры контрольных точек
-----------------------------------------------------------------
            Комментарий    |      Адрес          |    Длина
                           |(шестнадцатиричный)  |  (в байтах)
-----------------------------------------------------------------
Содержимое регистра  |  DR0|      A0001          |1 (LEN0 = 00)
Содержимое регистра  |  DR1|      A0002          |2 (LEN0 = 00)
Содержимое регистра  |  DR2|      B0002          |2 (LEN0 = 01)
Содержимое регистра  |  DR3|      C0000          |4 (LEN0 = 11)
---------------------------|---------------------|---------------
                           |      A0001          |       1
                           |      A0002          |       1
                           |      A0001          |       2
Операции с памятью,        |      A0002          |       2
вызывающие срабатывание    |      B0002          |       2
ловушки                    |      B0001          |       4
                           |      C0000          |       4
                           |      C0001          |       2
                           |      C0003          |       1
---------------------------|---------------------|---------------
Операции с памятью,        |      A0000          |       1
не вызывающие срабатывание |      A0003          |       4
ловушки                    |      B0000          |       2
                           |      C0004          |       4
-----------------------------------------------------------------
11.3  Отладочные исключения
-----------------------------------------------------------------
Два вектора прерывания процессора i486 резервируются для
отладочных исключений. Отладочные исключения являются обычным
способом запуска отладчиков, разработанных для процессора i486;
исключение контрольной точки предназначена для передачи
контрольной точки в отладчик.
11.3.1  Прерывание 1 - отладочные исключения
-----------------------------------------------------------------
Обработчик данного исключения обычно представляет собой отладчик
или часть отладочной ситемы. Процессор генерирует отладочное
исключение для любого из нескольких условий. Отладчик может
проверять флаги в регистрах DR6 и DR7, чтобы определить, какое
условие вызвало данное исключение и какие еще условия могут
также являться ее причиной. В Таблице 11-2 показаны состояния
этих битов для каждого типа условия контрольной точки.
Контрольные точки команд называются сбоями; прочие отладочные
исключения называются ловушками. Отладочное исключение
одновременно может сообщать о каждой из них по отдельности, либо
сразу об обеих. В следующих разделах каждый класс отладочных
исключений описан подробно.
11.3.1.1  Сбой в контрольной точке команды
-----------------------------------------------------------------
Процессор сообщает о контрольной точке команды до выполнения
самой этой команды (т.е., отладочное исключение, вызванное
контрольной точкой команды, относится к сбоям).
Флаг RF позволяет обработчику отладочного исключения выполнять
рестарт команд, вызвавших сбой, за исключением отладочных сбоев.
В случае любого такого сбоя автор системного программного
обеспечения должен установить бит RF в копии регистра EFLAGS,
помещаемого в стек в подпрограмме-обработчике отладочного
исключения. Этот бит подготавливает возможность возобновления
выполнения программы с адреса контрольной точки без генерации на
этой же команде повторного сбоя. (Примечание: бит RF не вызывает
игнорирование ловушек контрольных точек или других видов сбоев).
          Таблица 11-2. Условия отладочного исключения
-----------------------------------------------------------------
Тестируемые флаги                          Описание
-----------------------------------------------------------------
BS = 1                         Ловушка пошагового выполнения
B0 = 1 и (GE0 = 1 или LE0 = 1) Контрольная точка, определенная дл
                               DR0, LEN0 и R/W0
B1 = 1 и (GE1 = 1 или LE1 = 1) Контрольная точка, определенная дл
                               DR1, LEN1 и R/W1
B2 = 1 и (GE2 = 1 или LE2 = 1) Контрольная точка, определенная дл
                               DR2, LEN2 и R/W2
B3 = 1 и (GE3 = 1 или LE3 = 1) Контрольная точка, определенная дл
                               DR3, LEN3 и R/W3
BD = 1                         Отладочные регистры, используемые
                               для встроенной эмуляции
BT = 1                         Переключение задачи
-----------------------------------------------------------------
Процессор очищает флаг RF при успешном завершении каждой
команды, за исключением завершения команды IRET, команды POPF и
команд JMP, CALL или INT, вызывающих переключение задачи. Эти
команды переключают флаг RF в значение, заданное сохраненной
копией регистра EFLAGS.
Процессор устанавливает флаг RF в копии регистра EFLAGS,
помещенной в стек перед входом в любой обработчик сбоя. Когда
вход в обработчик сбоя выполняется для контрольных точек команд,
например, флаг RF устанавливается в копии регистра EFLAGS,
помещаемой в стек; следовательно, команда IRET, возвращающая
управление из обработчика исключения, будет восстанавливать флаг
RF в регистре EFLAGS, и выполнение возобновится в прерванной
контрольной точкой команде без генерации для той же самой
команды другой контрольной точки.
Если после отладочного сбоя флаг RF установлен, и отладочный
обработчик пытается повторить выполнение сбойной команды,
возможно, что эта попытка приведет к другим сбоям. Рестарт
команды после таких сбоев также происходит при установленном
флаге RF, поэтому продолжается подавление повторных отладочных
сбоев. Процессор очищает флаг RF только после успешного
завершения команды.
11.3.1.2  Ловушка контрольной точки данных
-----------------------------------------------------------------
Исключение контрольной точки данных называется ловушкой; т.е.,
процессор генерирует исключение для контрольной точки данных
после выполнения команды, обращающейся к позиции в памяти
данных, для которой установлена контрольная точка.
При использовании контрольных точек данных рекомендуется, чтобы
также был установлен либо бит LE, либо GE регистра DR7. При
установленном бите LE или GE любая ловушка точки останова данных
срабатывает немедленно после завершения команды, выполнившей
доступ к позиции в памяти, для которой была установлена
контрольная точка. Немедленное сообщение выполняется путем
принудительного ожидания исполнительным модулем процессора
завершения пересылки операнда данных перед началом выполнения
следующей команды. Если ни один из указанных битов не
установлен, контрольные точки данных не могут генерироваться до
команды, следующей за выполнившей этот доступ к данным, либо не
могут генерироваться вообще. Это происходит потому, что обычно
выполнение команд перекрывается по времени с переносом данных в
памяти. Выполнение следующей команды может начаться до
завершения операций с памятью предыдущей команды.
Если отладчику требуется сохранить содержимое позиции
контрольной точки, куда выполняется запись, он должен сохранить
исходное содержимое до установки контрольной точки. Поскольку
контрольные точки данных являются ловушками, исходные данные
затираются до генерации исключения ловушки. Обработчик может
сообщить сохраненное значение после срабатывания контрольной
точки. Данные в отладочных регистрах могут быть использованы для
адресации нового значения, записанного командой, которая привела
к срабатыванию контрольной точки.
11.3.1.3  Сбой общего обнаружения
-----------------------------------------------------------------
Сбой общего обнаружения происходит при попытке использования
отладочных регистров в то время, как они используются встроенной
эмуляцией. Такая дополнительная защита гарантирует эмулятору
полное управление над всеми отладочными регистрами, когда ему
это требуется. Обработчик исключений может обнаруживать это
условие, проверяя состояние бита BD регистра DR6.
11.3.1.4  Ловушка пошагового выполнения
-----------------------------------------------------------------
Эта ловушка происходит после выполнения команды, если до
выполнения команды был установлен флаг TF. Отметим, что данное
исключение не происходит после выполнения команды,
устанавливающей флаг TF. Например, если команда POPF
используется для установки флага TF, то ловушка пошагового
выполнения не происходит до следующей после POPF команды.
Процессор очищает флаг TF перед вызовом обработчика исключения.
Если флаг TF был установлен в TSS во время переключения задачи,
то исключение может произойти после выполнения первой
команды новой задачи.
Флаг пошагового выполнения не очищается при изменении
привилегированности внутри задачи. Однако, команды INT очищают
флаг TF. Следовательно, отладчики программного обеспечения с
пошаговым выполнением кода должны распознавать и эмулировать
команды INT n или INTO, а не выполнять их непосредственно.
Для обслуживания средств защиты операционная  система  должна
проверять текущий   уровень   привилегированности   после   каждо
пошаговой ловушки,  чтобы  проверить,  что   на   текущем   уровн
привилегированности пошаговое выполнение может быть продолжено.
Приоритеты прерываний гарантируют, что в случае внешнего
прерывания пошаговое выполнение остановится. Когда внешнее
прерывание и ловушка пошагового выполнения происходят
одновременно, первым обрабатывается прерывание пошагового
выполнения. Оно очищает флаг TF. После сохранения адреса
возврата или переключения задачи вход внешнего прерывания
исследуется до выполнения первой команды обработчика пошаговой
ловушки. Если внешнее прерывание все еще ожидает обработки, то
оно обслуживается. Обработчик внешних прерываний в режиме
пошагового выполнения не работает. Для выполнения его за один
шаг выполните вызывающую обработчик прерывания команду INT n.
11.3.1.5  Ловушка переключения задачи
-----------------------------------------------------------------
Отладочное исключение происходит также после переключения задачи
при установленном бите T в TSS новой задачи. Исключение
происходит после передачи управления новой задаче, но перед
выполнением первой команды новой задачи. Обработчик исключения
может обнаружить это условие, исследуя состояние бита BT
регистра DR6.
Отметим, что если отладчик отладочного исключения представляет
собой задачу, то бит T в ее TSS не должен быть установлен.
Нарушение этого правила может привести к зацикливанию
процессора.
11.3.2  Прерывание 3 - команда контрольной точки
-----------------------------------------------------------------
Ловушка контрольной точки вызывается выполнением команды INT 3.
Обычно отладчик подготавливает контрольную точку, заменяя первый
байт кода операции команды кодом операции команды контрольной
точки. Когда выполнение команды INT 3 вызывает обработчик
исключения, адрес возврата указывает на первый байт команды,
следующей за командой INT 3.
В более старых процессорах это средство  широко  используется
для  установки  контрольных точек в командах.  В случае процессор
i486 это легче реализовать с использованием  отладочных регистров
Однако, исключение контрольной точки полезно использовать для
установки контрольных точек в отладчике, так как исключение
контрольной точки позволяет ему вызывать обработчик исключения,
отличный от самого себя. Исключение контрольной точки также
может быть полезно, когда требуется установить больше
контрольных точек, чем позволяют отладочные регистры, либо при
их помещении в исходный код разрабатываемой программы.


Яндекс цитирования