#linker #ld #linker-scripts
#компоновщик #ld #компоновщик-скрипты
Вопрос:
При сбросе скрипта компоновщика моей системы с ld -verbose
помощью, я отмечаю, что он использует:
.data1 : { *(.data1) }
_edata = .; PROVIDE (edata = .);
. = .;
__bss_start = .;
.bss :
почему он присваивает текущий адрес текущему адресу?
Ответ №1:
. = .;
служит барьером для размещения бесхозного раздела.
https://sourceware.org/binutils/docs/ld/Location-Counter.html говорит»… Вместо этого предполагается, что все присваивания или другие операторы принадлежат предыдущему разделу вывода, за исключением особого случая присваивания » .
После того, как компоновщик выберет наилучшее описание раздела вывода, он пропустит следующие назначения, не связанные с .
символами. С помощью a . = .;
компоновщик прекратит поиск и поместит потерянный раздел непосредственно над . = .;
.