Согласно документации GNU ld , ld можно указать обрабатывать разделы потерянного компоновщика как ошибки, используя параметр командной строки --orphan-handling=error
.
Предполагая, что orphan.c содержит следующееcode:
int foo __attribute__((section(".bar"))) = 5;
int main(void)
{
return 0;
}
Следующая команда успешно выполняется:
aarch64-elf-gcc --specs=rdimon.specs -o orphan orphan.c
Но эта команда не работает:
aarch64-elf-gcc --specs=rdimon.specs -Wl,--orphan-handling=error -o orphan orphan.c
c:/git/cortex-baremetal/opt/gcc-linaro-7.3.1-2018.05-i686-mingw32_aarch64-elf/bin/../lib/gcc/aarch64-elf/7.3.1/../../../../aarch64-elf/bin/ld.exe: error: unplaced orphan section `.tm_clone_table' from `c:/git/cortex-baremetal/opt/gcc-linaro-7.3.1-2018.05-i686-mingw32_aarch64-elf/bin/../lib/gcc/aarch64-elf/7.3.1/crtbegin.o'.
c:/git/cortex-baremetal/opt/gcc-linaro-7.3.1-2018.05-i686-mingw32_aarch64-elf/bin/../lib/gcc/aarch64-elf/7.3.1/../../../../aarch64-elf/bin/ld.exe: error: unplaced orphan section `.bar' from `C:\Users\user\AppData\Local\Temp\cc6aRct8.o'.
c:/git/cortex-baremetal/opt/gcc-linaro-7.3.1-2018.05-i686-mingw32_aarch64-elf/bin/../lib/gcc/aarch64-elf/7.3.1/../../../../aarch64-elf/bin/ld.exe: error: unplaced orphan section `.tm_clone_table' from `c:/git/cortex-baremetal/opt/gcc-linaro-7.3.1-2018.05-i686-mingw32_aarch64-elf/bin/../lib/gcc/aarch64-elf/7.3.1/crtend.o'.
Кажется, скрипт компоновщика по умолчанию, который я использовал дляцель этого примера отсутствует в другом разделе, '.tm_clone_table'
.Это должно быть исправлено, чтобы не вызывать ошибку, когда секция '.bar'
определена правильно.