Библиотека сайта rus-linux.net
GDB
Глава 4 из книги "Архитектура приложений с открытым исходным кодом", том 2.
Оригинал: GDB
Автор: Stan Shebs
Перевод: А.Панин
4.5. Переносимость
Ввиду необходимости постоянного доступа к физическим регистрам чипа в процессе работы, приложение GDB изначально проектировалось с учетом возможности переноса на широкий спектр систем. Однако, стратегия переносимости приложения с течением времени значительно изменилась.
Изначально программа GDB разрабатывалась аналогично всем остальным программам проекта GNU того времени; для разработки использовалось ограниченное подмножество функций языка C, причем при написании кода применялась комбинация макросов препроцессора и фрагментов файла Makefile для адаптации к специфической архитектуре процессора и операционной системе. Несмотря на то, что главной задачей проекта GNU было создание самодостаточной "Операционной системы GNU", запуск приложений должен был быть возможен в множестве существующих на тот момент систем; разработка ядра Linux начнется только спустя несколько лет. Сценарий оболочки с именем configure
является первым ключевым звеном процесса. Он может выполнять множество различных действий, таких, как создание символьной ссылки для специфичного для используемой системы файла, позволяющей использовать стандартное имя заголовочного файла или формирование файлов на основе фрагментов, а наиболее важная работа, заключающаяся в сборке программы, осуществлялась с использованием файла Makefile.
cat
или diff
, поэтому со временем действия по переносу GDB на другие платформы были разделены на три класса, причем для выполнения каждого действия использовался свой фрагмент файла Makefile и свой заголовочный файл.
- "Относящиеся к узлу объявления" используются для работы с системой, на которой выполняется GDB и могут включать такие объявления, как размеры целочисленных типов, применяющихся на узле. После изначальной реализации в виде создаваемых пользователями заголовочных файлов, стало ясно, что необходимые расчеты могут проводиться в ходе вызова сценарием
configure
небольших тестовых программ, которые компилируются с помощью того же компилятора, который будет используется для сборки приложения. Для этой цели может использоваться набор инструментовautoconf
[aut12] и на сегодняшний день практически все инструменты проекта GNU, а также большинство (если не все) программы для Unix используют сгенерированные средствамиautoconf
сценарии конфигурации. - "Относящиеся к целевой системе объявления" специфичны для машины, на которой будет выполняться отлаживаемая программа. В том случае, если целевая система аналогична системе узла, на котором выполняется приложение GDB, выполняется "непосредственная отладка", в противном случае выполняется "кросс-отладка", при которой используется какой-либо тип соединения двух систем. Относящиеся к целевой системе объявления могут быть разделены на два основных класса:
- "Объявления, относящиеся к архитектуре": Эти объявления описывают принцип дизассемблирования машинного кода, принцип обхода стека вызовов, а также инструкции-ловушки, которые следует выставлять в точках останова. Изначально реализованные с помощью макросов, они были преобразованы в обычный код на языке C, доступ к которому может быть получен с использованием объектов "gdbarch", о чем более подробно будет написано ниже.
- "Объявления, относящиеся непосредственно к системе": Эти объявления описывают специфику передачи аргументов при использовании вызовов
ptrace
(которые в значительной степени отличаются в различных Unix-системах), принцип поиска загруженных разделяемых библиотек, и другие подобные вещи, относящиеся исключительно к случаю непосредственной отладки. Эти объявления являются последним примером использования макросов в стиле 1980 годов, но большая часть этих объявлений уже генерируется средствамиautoconf
.
Продолжение статьи: Структуры данных