Перейти к содержанию
    

Собрать весь неявно сгенерированный код в одну секцию

Собственно, как?

Под неявно сгенерированным кодом в контексте данной темы следует понимать функции, добавляемые в итоговую прошивку  компилятором  для подготовки и инициализации Си-окружения: инициализация глобальных и локальных статических данных, конструкторы глобальных объектов в С++. По-сути, это все то, что вызывается в функции _main() и в вызываемых из неё функциях.

Хочу собрать всё это добро в одной секции, чтобы разместить её в определенном регионе памяти - в начале, там где таблица векторов.

Есть какой-то общий аттрибут у таких функций, который можно было бы использовать в скеттер-файле для их идентификации?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10.03.2021 в 20:22, Arlleex сказал:

А *(InRoot&&Sections) Вам на что?

Вобщем, я принял за код инициализации функции стандартной библиотеки, которые тоже были включены в код.

Выделил их с помощью *armlib/c_* (+RO) и поместил в тот же регион, что и *(InRoot&&Sections) - всё ушло в нужный регион.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот с С++ проектом не все так просто.

Даже указание поместить в один регион секции:

*.o (RESET, +First)
*(InRoot$$Sections)
*armlib/c_* (+RO)
*cpplib*(+RO)
*(.init_array)
     

не привело к тому, что код вызовов конструкторов глобальных объектов был помещен туда. Пришлось искать его вручную и явно прописывать размещение этой секции с названием i.__sti___18_Global_objects_cpp_83de1816 явно сгенерированным из имени файла Global_objects.cpp в котором и создаются глобальные объекты программы.

Нигде в мануале на линкер не смог найти, каким образом выделить эту секцию в линкер-скрипте. Завтра линкер поменяет ей имя и снова-здорово. Да и в каждом новом проекте придется искать эту секцию методом хождения по шагам в дизассемблере.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А по куску имени секции не получится? i.__sti___ -- это, похоже, всегда будет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 минут назад, SII сказал:

i.__sti___ -- это, похоже, всегда будет.

Скорее всего так и будет.

Но я надеялся найти в мануале на линкер некое  зарезервированное имя для секции с кодом вызовов конструкторов глобальных объектов. Не нашел.

А до этого предполагал, что это все войдет в *(InRoot$$Sections). А оно не вошло.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...