Цитата(AHTOXA @ Jun 12 2013, 22:45)

Ничего себе, сколько вопросов

Сразу предупреждаю, так глубоко я не копал, так что не на все вопросы у меня есть ответы.
Я посмотрел на скрипт внимательно, почитал доку на линкер и понял, что надо позадавать еще вопросов

Цитата
Это что-то связанное с обработкой исключений. Хотя мы отключаем эту обработку, всё равно что-то иногда пролазит. Короче, без этой секции какой-то из линкеров не собирал.
Зачем вообще она нужна для ARM? Почему ее полностью не отключат изначально? Или тулчейн один и на мелкие процы, и на крупные процы, а на крупных обработка исключений в ходу, в отличие от мелких?
Цитата
Да, так. Если мы сильно захотим, то можем в программе задать свой адрес для _estack.
Ууу... что, может понадобиться?
Цитата
Выравнивание на 8 байт - это требование ARM EABI. Без этого бывают
трудноуловимые глюки.
Ветку почитаем, спасибо. Пруфлинк можно про выравнивание, пожалуйста?
Цитата
Выравнивания полезны

Я не помню, зачем они в каждом конкретном случае, но хуже от них точно не будет.
Дырки в памяти образуются

И большое количество команд выравнивания вводит в ступор: не понимаешь для чего это и почему именно так и нужно ли вообще...
А хочется все понимать...
Цитата
Лично наблюдал приличное уменьшение времени переключения контекста scmRTOS при добавлении выравнивания функции переключения контекста.
Может, связано с выборкой команд? Ну там... ARM-инструкции (32 бита), THUMB-инструкции (16 бит)... т. е., адрес расположеня должен почему-то быть кратным 4 или 2 байтам...
Цитата
Мусор чистит очень просто. То, что KEEP - оставляет, далее строит дерево вызовов. Всё, что не вызывается из того, что KEEP - выкидывается.
Т. е., то, на что есть ссылки в коде и то, что обрамлено KEEP оставляется, все остальное - выкидывается?
Цитата
Здесь простейшая проверка, что перед _eusrstack у нас останется _Minimum_Stack_Size свободного места. Если не останется, то линкер ругнётся.
Код
._usrstack :
{
. = ALIGN(4);
_susrstack = .;
. = . + _Minimum_Stack_Size;
. = ALIGN(4);
_eusrstack = .;
} >RAM
Как я понимаю, эта секция - последнее, что будет размещено в RAM. И, если не хватит места для ее размещения, то линкер об этом сообщит?
Фактически мы проверям (на этапе линковки), что размер стека будет не менее чем _Minimum_Stack_Size?
А во время выполнения программы?

Стек ведь может переполниться...
Цитата
Да, всё полезное из этих файлов мы уже забрали выше.
Как я понимаю, это влияет на размер бинаря. А еще что на размер влияет?
Встречал где-то, что многие сталкиваются с "раздуванием" бинаря при использовании Си++, но сам пока не изучал вопрос.