Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

GDB

Глава 4 из книги "Архитектура приложений с открытым исходным кодом", том 2.
Оригинал: GDB
Автор: Stan Shebs
Перевод: А.Панин

4.5. Переносимость

Ввиду необходимости постоянного доступа к физическим регистрам чипа в процессе работы, приложение GDB изначально проектировалось с учетом возможности переноса на широкий спектр систем. Однако, стратегия переносимости приложения с течением времени значительно изменилась.

Изначально программа GDB разрабатывалась аналогично всем остальным программам проекта GNU того времени; для разработки использовалось ограниченное подмножество функций языка C, причем при написании кода применялась комбинация макросов препроцессора и фрагментов файла Makefile для адаптации к специфической архитектуре процессора и операционной системе. Несмотря на то, что главной задачей проекта GNU было создание самодостаточной "Операционной системы GNU", запуск приложений должен был быть возможен в множестве существующих на тот момент систем; разработка ядра Linux начнется только спустя несколько лет. Сценарий оболочки с именем configure является первым ключевым звеном процесса. Он может выполнять множество различных действий, таких, как создание символьной ссылки для специфичного для используемой системы файла, позволяющей использовать стандартное имя заголовочного файла или формирование файлов на основе фрагментов, а наиболее важная работа, заключающаяся в сборке программы, осуществлялась с использованием файла Makefile.

Такие программы, как GCC и GDB предъявляют большие требования к процессу переноса на другие системы в сравнении с такими программами, как cat или diff, поэтому со временем действия по переносу GDB на другие платформы были разделены на три класса, причем для выполнения каждого действия использовался свой фрагмент файла Makefile и свой заголовочный файл.
  • "Относящиеся к узлу объявления" используются для работы с системой, на которой выполняется GDB и могут включать такие объявления, как размеры целочисленных типов, применяющихся на узле. После изначальной реализации в виде создаваемых пользователями заголовочных файлов, стало ясно, что необходимые расчеты могут проводиться в ходе вызова сценарием configure небольших тестовых программ, которые компилируются с помощью того же компилятора, который будет используется для сборки приложения. Для этой цели может использоваться набор инструментов autoconf [aut12] и на сегодняшний день практически все инструменты проекта GNU, а также большинство (если не все) программы для Unix используют сгенерированные средствами autoconf сценарии конфигурации.
  • "Относящиеся к целевой системе объявления" специфичны для машины, на которой будет выполняться отлаживаемая программа. В том случае, если целевая система аналогична системе узла, на котором выполняется приложение GDB, выполняется "непосредственная отладка", в противном случае выполняется "кросс-отладка", при которой используется какой-либо тип соединения двух систем. Относящиеся к целевой системе объявления могут быть разделены на два основных класса:
    • "Объявления, относящиеся к архитектуре": Эти объявления описывают принцип дизассемблирования машинного кода, принцип обхода стека вызовов, а также инструкции-ловушки, которые следует выставлять в точках останова. Изначально реализованные с помощью макросов, они были преобразованы в обычный код на языке C, доступ к которому может быть получен с использованием объектов "gdbarch", о чем более подробно будет написано ниже.
    • "Объявления, относящиеся непосредственно к системе": Эти объявления описывают специфику передачи аргументов при использовании вызовов ptrace (которые в значительной степени отличаются в различных Unix-системах), принцип поиска загруженных разделяемых библиотек, и другие подобные вещи, относящиеся исключительно к случаю непосредственной отладки. Эти объявления являются последним примером использования макросов в стиле 1980 годов, но большая часть этих объявлений уже генерируется средствами autoconf.


Продолжение статьи: Структуры данных