Darth Vader 0 10 марта, 2021 Опубликовано 10 марта, 2021 · Жалоба Собственно, как? Под неявно сгенерированным кодом в контексте данной темы следует понимать функции, добавляемые в итоговую прошивку компилятором для подготовки и инициализации Си-окружения: инициализация глобальных и локальных статических данных, конструкторы глобальных объектов в С++. По-сути, это все то, что вызывается в функции _main() и в вызываемых из неё функциях. Хочу собрать всё это добро в одной секции, чтобы разместить её в определенном регионе памяти - в начале, там где таблица векторов. Есть какой-то общий аттрибут у таких функций, который можно было бы использовать в скеттер-файле для их идентификации? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 130 10 марта, 2021 Опубликовано 10 марта, 2021 · Жалоба А *(InRoot&&Sections) Вам на что? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darth Vader 0 11 марта, 2021 Опубликовано 11 марта, 2021 · Жалоба 10.03.2021 в 20:22, Arlleex сказал: А *(InRoot&&Sections) Вам на что? Вобщем, я принял за код инициализации функции стандартной библиотеки, которые тоже были включены в код. Выделил их с помощью *armlib/c_* (+RO) и поместил в тот же регион, что и *(InRoot&&Sections) - всё ушло в нужный регион. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darth Vader 0 14 марта, 2021 Опубликовано 14 марта, 2021 · Жалоба А вот с С++ проектом не все так просто. Даже указание поместить в один регион секции: *.o (RESET, +First) *(InRoot$$Sections) *armlib/c_* (+RO) *cpplib*(+RO) *(.init_array) не привело к тому, что код вызовов конструкторов глобальных объектов был помещен туда. Пришлось искать его вручную и явно прописывать размещение этой секции с названием i.__sti___18_Global_objects_cpp_83de1816 явно сгенерированным из имени файла Global_objects.cpp в котором и создаются глобальные объекты программы. Нигде в мануале на линкер не смог найти, каким образом выделить эту секцию в линкер-скрипте. Завтра линкер поменяет ей имя и снова-здорово. Да и в каждом новом проекте придется искать эту секцию методом хождения по шагам в дизассемблере. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SII 0 14 марта, 2021 Опубликовано 14 марта, 2021 · Жалоба А по куску имени секции не получится? i.__sti___ -- это, похоже, всегда будет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darth Vader 0 14 марта, 2021 Опубликовано 14 марта, 2021 · Жалоба 5 минут назад, SII сказал: i.__sti___ -- это, похоже, всегда будет. Скорее всего так и будет. Но я надеялся найти в мануале на линкер некое зарезервированное имя для секции с кодом вызовов конструкторов глобальных объектов. Не нашел. А до этого предполагал, что это все войдет в *(InRoot$$Sections). А оно не вошло. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться