Есть ли способ, чтобы компилятор предупреждал / ошибался, если в скрипте компоновщика не определена секция атрибута? - PullRequest
0 голосов
/ 18 октября 2018

Используя набор инструментов компилятора arm-none-eabi-gcc для микроконтроллеров arm, и я определяю определенный раздел в FLASH, где должна жить эта переменная foo.

Допустим, у меня есть пример определения:

int foo __attribute__((section(".bar"))) = 5;

Что я заметил, так это то, что если .bar не назначен в сценарии компоновщика, то сборка будет успешно выполнена и foo будет жить в RAM вместо инициализированных данных (константаначальное значение, конечно, также увеличится до размера FLASH).Раздражает то, что компоновщик не жалуется, когда раздел не существует, и поэтому, если ожидается, что данные будут находиться в FLASH, он может тихо жить в нефиксированном месте в RAM.Есть ли опция компиляции / компоновщика для принудительного сбоя, если это произойдет?

1 Ответ

0 голосов
/ 18 октября 2018

Согласно документации 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' определена правильно.

...