Я разочарован, потому что не могу найти информацию о сегментации памяти. Я знаю, что я должен разделить память на основные разделы, такие как .text, .data, .bss, .stack, которые используются в объектных файлах скомпилированной программы. Я знаю, что есть еще много других разделов, некоторые из них необходимы для C и других для C++. Я ищу информацию о том, какие разделы должны быть включены в скрипт компоновщика?Секции памяти в скрипте компоновщика GNU для Cortex-M4
ответ
Это зависит от вашего конкретного компилятора и целевой архитектуры, выходные секции которых будут присутствовать или, возможно, присутствовать. И в вашем коде вы можете определить секции ввода с произвольными именами. Ваш скрипт компоновщика служит для привязки символов из файлов или символов, перечисленных в явно определенных разделах ввода, к выходным разделам.
Лучший способ узнать, какие выходные секции присутствуют, состоит в том, чтобы просто скомпилировать и связать пример приложения и проверить сгенерированный файл карты (если файл карты не создается автоматически, вы должны настроить параметры компоновщика). Файл карты не предназначен для потребления другим инструментом, но служит читаемым описанием того, что входит в вашу программу, в каком месте, в каком разделе и почему. Примечание: в этом файле карты вы также найдете имена разделов, которые не являются частью вашей программы, и не будут переводить на физические биты, которые выполняются или используются вашей программой, но являются скорее вспомогательными средствами для вашего отладчика.
Если вы явно не отобразите некоторые символы в выходной раздел, компоновщик, как правило, просто добавит все оставшиеся символы после последнего явно определенного раздела.
Таким образом, вы также можете определить какой-то раздел «catch-all», который наверняка привлечет все еще не назначенные символы, а затем проверит, остается ли раздел вывода пустым. т.е.
В конце вашего УЧАСТКОВ блока, добавить
SECTION
{
<snip>
.mustbeempty
{
*(.*) ;
}
ASSERT(SIZEOF(.mustbeempty) = 0) ;
}
Более подробную информацию о компоновщике сценариях можно найти во многих местах:
- На StackOverflow это было предложено до : Which man page describes ld linker script syntax?
- Полное описание можно найти в этом pdf: https://web.eecs.umich.edu/~prabal/teaching/eecs373-f11/readings/Linker.pdf
- красная шляпа красиво отформатирована страницы: https://access.redhat.com/site/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Using_ld_the_GNU_Linker/index.html
- Я использовал эту страницу на scoberlin много: http://www.scoberlin.de/content/media/http/informatik/gcc_docs/ld_3.html поскольку весь синтаксис л.д. файл один полный HTML страницы, поэтому его легко можно найти.
+1 Не могли бы вы расширить свой ответ? Кроме того, есть ли у вас какие-либо ссылки для получения дополнительной информации о скриптах-линкерах? Благодарю. – Sabuncu
См. Также здесь: http://stackoverflow.com/q/12763041/911550 – parvus