Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО юнита 2.doc
Скачиваний:
38
Добавлен:
17.11.2019
Размер:
5.82 Mб
Скачать

3.8 Определение точки входа

Вспомогательный заголовок объектных файлов обычного формата, применяемый в ОС UNIX и имеющий структуру a.out, содержит поле для основной точки входа этого файла. Правила заполнения этого поля редактором связей (в порядке их применения):

– берется значение имени, заданного в опции -e, если эта опция используется;

– используется значение имени _start, если это имя определено;

– используется значение имени main, если это имя определено;

– в остальных случаях поле получает нулевое значение.

Можно задать значение точки входа, используя опцию -e или предложение управляющего языка вида

_start = выражение

Когда редактор связей вызывается на выполнение командой cc(1), программа пользователя объединяется с инициализирующей программой. Если пользователь вызывает редактор связей сам и/или изменяет точку входа, он должен гарантировать, что программа завершает выполнение системным вызовом exit.

3.9 Библиотеки объектных файлов

Каждый элемент библиотеки объектных файлов (библиотека libc.a) является полноценным объектным файлом. Команда ar(1) создает библиотеки из объектных файлов, генерируемых компиляторами. Библиотеки обрабатываются редактором связей избирательно: используются только те элементы, которые разрешают внешние ссылки. Библиотеки могут упоминаться как внутри предложений, определяющих секции, так и вне их. Объектный файл используется для редактирования внешних связей, если выполнены следующие два условия:

– существует неразрешенная ссылка на имя, определенное в этом файле;

– ссылка обнаружена ld(1) до завершения просмотра библиотеки.

При использовании элемента библиотеки, просматриваемой в процессе обработки предложения SECTIONS, все входные секции из этого объектного файла помещаются в ту выходную секцию, которая создается в этом предложении. Если же элемент используется при просмотре библиотеки, упомянутой вне предложения SECTIONS, то каждая входная секция из этого объектного файла помещается в одноименную выходную. В последнем случае, если это необходимо, создаются новые выходные секции.

Необходимо помнить следующее:

– в предложениях управляющего языка редактора связей можно указать только библиотеку целиком, но не отдельные элементы;

– не существует способа изменить изложенные выше правила редактирования связей элементов библиотек объектных файлов и их секций.

Опция -l используется как средство сокращения записи при спецификации входных файлов, принадлежащих предопределенному набору каталогов и имеющих предопределенные имена. Таким образом задаются библиотеки. Библиотеки объектных файлов могут быть указаны и без опции -l путем задания их маршрутных имен.

Важен порядок указания библиотек, так как из них извлекаются лишь элементы, на которые есть неразрешенные ссылки к моменту просмотра библиотеки. ld(1) просматривает находящуюся в начале библиотеки объектных файлов таблицу имен несколько раз, пока не обнаружит, что никакие внешние ссылки не могут более быть разрешены за счет элементов этой библиотеки.

Обход неконфигурируемых областей памяти

Когда в виртуальной памяти есть неконфигурируемые области, каждое приложение должно самостоятельно обеспечивать такую структуру выходных секций, чтобы они помещались в конфигурируемых областях. Например, конфигурация памяти:

MEMORY {

mem1: о=0x00000 l=0x02000

mem2: о=0x40000 l=0x05000

mem3: о=0x20000 l=0x10000

}

В каждом из файлов f1.o, f2.o, ..., fn.o содержатся три секции: .text, .data и .bss. Предположим, что размер объединенной секции .text оказался равным 0x12000 байт. Легко видеть, что не существует конфигурируемой области памяти достаточной длины. Чтобы ld(1) мог выполнить размещение, необходимо эту секцию разделить посредством соответствующих предложений.