Операционная система UNIX. Руководство программиста


Группировка выходных секций


Подразумеваемый алгоритм размещения секций для редактора связей ld(1) таков:

  • В одну выходную секцию помещаются все входные секции .init, а за ними все входные секции .text. Эта выходная секция получает имя .text; она связывается с адресом, равным 0x0 плюс размер всех заголовков выходного файла.
  • Все входные секции .data помещаются в одну выходную. Этой выходной секции дается имя .data, и, в системах со страничной виртуальной памятью, она связывается с адресом, который получается выравниванием на машинно-зависимую границу плюс величина, определяемая размерами заголовков и секции .text.
  • Все секции неинициализированных данных .bss, а также все неинициализированные и неразмещаемые глобальные имена помещаются в одну выходную секцию с именем .bss, которая располагается сразу после секции .data без выравнивания по какой-либо границе.

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

SECTIONS { .text размер_заголовков : { *(.init) *(.text) } } GROUP BIND (NEXT (граница_выравнивания) + (SIZEOF (.text) + ADDR (.text)) % 0x2000) : { .data : { } .bss : { } } }

где граница_выравнивания есть машинно-зависимая константа. Предложение GROUP обеспечивает группировку, то есть последовательное размещение, двух выходных секций, .data и .bss. Связывание с конкретным адресом и выравнивание по определенной границе производится для группы в целом, а не для отдельных входящих в нее секций. Секции, образующие группу, размещаются последовательно в том порядке, в котором они указываются в предложении GROUP.

Если необходимо сгруппировать секции .text, .data и .bss, следует использовать такое предложение SECTIONS:

SECTIONS { GROUP: { .text: {} .data: {} .bss: {} } }




- Начало -  - Назад -  - Вперед -



Книжный магазин