Отключение инициализации статических глобальных объектов (ключ -asm) — КиберПедия 

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Семя – орган полового размножения и расселения растений: наружи у семян имеется плотный покров – кожура...

Отключение инициализации статических глобальных объектов (ключ -asm)

2022-10-05 21
Отключение инициализации статических глобальных объектов (ключ -asm) 0.00 из 5.00 0 оценок
Заказать работу

Параметр -asm позволяет редактору связей, необходимых для инициализации статических глобальных объектов в Си++.

Следующий пример связывает воедино файлы file1.elf и file2.elf, и создают абсолютный исполняемый файл, отключая обработку и создание специализированных секций.init и.fini:

linker file1.elf file2.elf -asm -oresult.abs

Если пользователь не использует стандартный стартовый код для запуска программы, то он может удалить упомянутые секции из исполняемого файла. Поскольку секции.init и.fini обрабатываются специальным образом, они не могут быть удалены путем использования ключа -d{1..4}, для этого и введен специальный ключ -asm.

Стартовый код содержит два вызова функций:

call ctor;

call dtor;

Они вызываются соответственно до и после функции __main - главной функции пользовательской программы. Метки ctor и dtor определены в начале секций.init и.fini. Если в программе встречались статические глобальные объекты, поля которых необходимо инициализировать, то в секции.init и.fini добавляются вызовы соответствующих функций инициализации и удаления этих объектов. Если же полей, которые необходимо инициализировать до функции __main нет, то функции ctor и dtor содержат только команды возврата.

Если пользователь использует свою точку входа, а его программа написана на ассемблере и не требует досрочной инициализации статических полей, он может использовать данный ключ, и удалить из исполняемого файла секции.init и.fini.

4.8.8 Определение пути к каталогу библиотечных файлов (ключ -l (строчная "L"))

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

Если пользователь хочет подключить библиотеку, которая расположена не в текущем каталоге, то он может добавить ее полное имя в командную строку, или указать при помощи ключа -l каталог, в котором она расположена.

Следующий пример связывает воедино файлы file1.elf и file2.elf, и осуществляет поиск неопределенных глобальных символов в библиотеке mylib.lib, расположенной в каталоге c:\lib:

linker file1.elf file2.elf mylib.lib -l c:\lib -oresult.abs

Между ключом -l и путем к каталогу библиотек не должно быть пробела.

Редактор связей осуществляет поиск библиотек в следующем порядке:

· рассматривает библиотеки, имена которых заданы в командной строке;

· ищет библиотеки с заданными именами в текущем каталоге;

· просматривает каталоги, заданные ключом -l в той последовательности, в которой они перечислены в командной строке или в командном файле.

Если пользователь желает задать несколько каталогов для поиска библиотек, он каждый каталог должен вводить параметр -l:

linker file1.elf file2.elf mylib.lib -l c:\rtl -l c:\lib -oresult.abs

 

Примечание Каждая библиотека состоит из определенного числа объектных файлов. Если искомый символ определен в данной библиотеке, это значит, что он определен в одном из объектных файлов, входящих в состав библиотеки. Поэтому только этот файл будет загружен редактором связей для дальнейшей обработки. Если в нем содержится много посторонней информации, не относящейся к определению рассматриваемого символа, она при наличии ключа -d{1..4}будет удалена из конечного исполняемого файла.

 

4.8.9 Создание карты памяти (ключ -m<имя_каталога>)

Параметр -m задает имя файла, в который редактор связей запишет информацию о карте распределения памяти для данного выходного файла. Карта памяти создается только для абсолютных исполняемых файлов. Она описывает:

· распределение памяти процессора (адреса и размеры банков),

· положение сегментов в банках памяти,

· распределение выходных секций по сегментам,

· положение входных секций в выходных,

· абсолютные адреса всех глобальных символов.

 

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

· таблица, описывающая адреса и размеры банков памяти процессора, размеры страницы памяти каждого банка,

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

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

· таблица, описывающая имена и адреса всех глобальных символов программы.

 

Следующий пример связывает воедино файлы file1.elf и file2.elf, создает абсолютный исполняемый файл и строит для него карту памяти, сохраняя ее в файле mapfile.map:

linker file1.elf file2.elf -m mapfile.map -oresult.abs

Между ключом -m и именем файла-карты памяти не должно быть пробела.

Имя файла-карты памяти ставится в том случае, если оно отлично от имени выходного файла. По умолчанию имя карты памяти совпадает с именем выходного файла, но имеет расширение ".map". Поэтому тот же пример, но с умалчиваемым значением карты памяти будет выглядеть так:

linker file1.elf file2.elf -m -oresult.abs

,при этом полученный файл-карта памяти будет иметь имя result.map.

4.8.10 Задание файла конфигурации (ключ -c<имя_файла>)

Параметр -c определяет имя файла конфигурации для создания абсолютного исполняемого файла. Файл конфигурации содержит всю информацию, необходимую для правильного размещения программы в памяти процессора. Более подробно файл конфигурации описывается в подразделе 4.11 «Файл конфигурации».

Следующий пример связывает воедино файлы file1.elf и file2.elf, создает абсолютный исполняемый файл и использует для этого файл конфигурации cfgfile.cfg:

linker file1.elf file2.elf -c cfgfile.cfg -oresult.abs

Между ключом -c и именем файла конфигурации не должно быть пробела. Файл конфигурации используется только для создания абсолютного исполняемого файла.

Если при создании абсолютного файла ключ -c с именем файла конфигурации не установлен, то редактор связей создает выходной файл с единственным программным сегментом, адрес начала которого равен 0x00000000, а размер неограничен. Неограниченность размера сегмента означает, что он вмещает в себя все загружаемые секции с учетом требований по их выравниванию. Для изменения адреса сегмента необходимо использовать ключ ‑addr, описанный ниже.

4.8.11 Задание адреса сегмента по умолчанию (ключ -addr=<адрес>)

В режиме создания абсолютного исполняемого файла, когда не задан файл конфигурации, редактор связей создает единый сегмент данных и кода, в который входят все загружаемые секции, встреченные редактором во входных файлах. Для задания адреса размещения этого сегмента в памяти процессора используется ключ -addr=<адрес>. В поле "адрес" заносится абсолютный адрес начала сегмента, записанный в шестнадцатеричном виде, например:

linker file1.elf file2.elf -addr=0x00000080;

linker file1.elf file2.elf -addr=0x80000080;

.


 

Параметры по умолчанию

По умолчанию, при запуске редактора связей с набором входных объектных файлов устанавливаются следующие входные параметры:

Табл. 4‑5 Параметры редактора связей по умолчанию.

Параметр Состояние Примечания
Установлен В результате работы редактора связей будет создан абсолютный исполняемый файл.
-d4 Установлен Удаляется вся отладочная информация и неиспользуемые секции и символы.
-heap=0x1000 Установлен / Не установлен Начальный размер кучи в локальной памяти равен 4K. Параметр устанавливается по умолчанию в случае включения в список входных файлов библиотеки управления динамической памятью
-heap1=0x1000 Установлен / Не установлен Начальный размер кучи в глобальной памяти равен 4K. Параметр устанавливается по умолчанию в случае включения в список входных файлов библиотеки управления динамической памятью
-heap2=0 Установлен / Не установлен По умолчанию, эта куча не используется
-heap3=0 Установлен / Не установлен По умолчанию, эта куча не используется
-stack=0x1000 Установлен Начальный размер стека равен 4K
start=start Установлен По умолчанию точкой входа считается метка start с глобальным типом связывания.
-asm Не установлен Включена поддержка начальной инициализации глобальных переменных в Си++
-l"" Установлен При нахождении неопределенных глобальных символов в рабочем каталоге осуществляется поиск библиотек, в которых данные символы могли бы быть определены.
-addr=0x00000000 Установлен В отсутствие файла конфигурации создается один загружаемый сегмент с адресом загрузки 0x00000000

Поделиться с друзьями:

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.016 с.