![](/user_photo/2706_HbeT2.jpg)
- •Гуманитарная Академия Дистанционное образование
- •Оглавление
- •Дидактический план
- •Литература
- •Перечень компетенций
- •Тематический обзор
- •1 Понятие системы программирования
- •1.1 Классификация систем программирования
- •1.2 Средства автоматизированной разработки программ
- •1.3 Пакеты прикладных программ
- •1.4 Объектно-ориентированные системы программирования
- •2 Основные концепции трансляторов
- •2.1 Введение в методы трансляции
- •2.2 Разновидности языкового процессора
- •2.3 Компиляторы как класс программного обеспечения
- •2.4 Среда разработки компилятора
- •2.5 Упрощенная модель компилятора
- •2.6 Лексический анализ
- •2.7 Синтаксический анализ
- •2.8 Семантический анализ
- •2.9 Конечный автомат
- •2.10 Контексно-свободная грамматика
- •2.11 Атрибутные транслирующие грамматики
- •2.12 Генерация кода
- •2.13 Распределение памяти
- •3 Редактор связей
- •3.1 Управляющий язык редактора связей
- •3.2 Предложения определения секций
- •3.3 Спецификации файлов
- •3.4 Выходная секция
- •3.5 Создание и определение имен при редактировании связей
- •3.6 Размещение секций в именованных областях памяти
- •3.7 Инициализация пустот и секций .Bss
- •3.8 Определение точки входа
- •3.9 Библиотеки объектных файлов
- •3.10 Алгоритм размещения
- •3.11 Инкрементальное редактирование связей
- •3.12 Синтаксис управляющего языка редактора связей
- •4 Отладчик
- •4.1 Отладчик Turbo Debugger
- •4.2 Отладчик Турбо Паскаль
- •4.3 Отладка программ в системе Delphi 7
- •Задания для самостоятельной работы
- •Тренинг компетенций
- •Глоссарий
- •Системное программное обеспечение (курс 1) юнита 2
3.2 Предложения определения секций
Предложение SECTIONS предназначено для указания способа комбинирования входных секций и размещения выходных секций (как в целом в виртуальной памяти, так и относительно других секций), а также для переименования выходных секций.
По умолчанию, если предложения SECTIONS отсутствуют, все одноименные входные секции объединяются в выходной секции с тем же именем. Если редактируются внешние связи двух объектных файлов, из которых первый содержит секции s1 и s2, а второй – секции s3 и s4, то выходной объектный файл будет содержать четыре секции: s1, s2, s3 и s4. Порядок этих секций зависит от порядка, в котором редактор связей будет просматривать входные файлы.
Синтаксис предложений SECTIONS:
SECTIONS {
имя_выходной_секции_1 : {
спецификации_файлов,
операторы_присваивания
}
имя_выходной_секции_2 : {
спецификации_файлов,
операторы_присваивания
}
…
}
3.3 Спецификации файлов
При определении выходной секции файлы и секции файлов, которые должны быть включены в нее, нужно перечислять в том порядке, в котором они должны следовать в выходной секции. Секции входного файла указываются одним из следующих способов:
имя_файла (имя_секции)
имя_файла (имя_секции1 имя_секции2 ...)
Имена секций входного файла, как и сами спецификации файлов, должны отделяться друг от друга пробелами, символами табуляции, переводами строк или запятыми.
Чтобы указать все неинициализированные и неразмещаемые глобальные объекты из данного файла, можно использовать запись
имя_файла [COMMON]
Если имя файла указывается без сопровождающего его списка секций, то все секции этого файла (кроме неинициализированных и неразмещаемых глобальных объектов) вставляются в определяемую выходную секцию.
Для спецификации всех не размещенных ранее входных секций с определенным именем используется запись вида
* (имя_секции)
Указание адреса загрузки секции
Связывание выходной секции с определенным адресом виртуальной памяти достигается посредством следующей разновидности предложения SECTIONS:
SECTIONS {
имя_выходной_секции_1 адрес : {
…
}
…
}
Адрес, с которым выполняется связывание, записывается в виде константы языка C. Редактор связей выдает соответствующее сообщение об ошибке, если выходная секция и адрес не могут быть связаны. В качестве адреса можно использовать слово BIND, за которым должно следовать выражение в скобках. В этом выражении могут встречаться псевдофункции SIZEOF, ADDR и NEXT. Аргументом SIZEOF и ADDR должна быть ранее определенная секция, а аргументом NEXT – константа. Псевдофункция NEXT возвращает минимальный адрес конфигурируемой памяти, по которому еще ничего не размещено, кратный аргументу.
Выходные секции можно разместить в любом месте конфигурируемой памяти, где они помещаются, не перекрываясь с другими секциями.
Предложения SECTIONS могут подаваться на вход редактора связей в произвольном порядке, если только не используются псевдофункции SIZEOF и ADDR.
Редактор связей не обеспечивает автоматически ни четного размера секции, ни четного адреса ее начала, в отличие от ассемблера, который гарантирует, что длина секции в байтах будет делиться на четыре. Используя предложения управляющего языка, можно добиться того, что секция будет начинаться с нечетного адреса, однако делать это не рекомендуется. Если секция начинается с нечетного байта, то либо она будет неправильно выполняться, либо неправильно будет осуществляться доступ к данным, находящимся в этой секции. Если пользователь все же указал нечетную границу, ld(1) выдаст предупреждение.