Я пишу загрузочный скрипт для устройства на базе ARM-Cortex M3. Если я скомпилирую загрузочный скрипт на ассемблере и код приложения C, а затем объединю объектные файлы и перенесу их на мое устройство, все будет работать.
Однако, если я использую ar
для создания архива (libboot.a) и объединяю этот архив с приложением C, возникает проблема:
Я поместил загрузочный код в раздел:
.section .boot, "ax"
.global _start
_start:
.word 0x10000800 /* Initial stack pointer (FIXME!) */
.word start
.word nmi_handler
.word hard_fault_handler
... etc ...
Я обнаружил, что ld
удаляет это из окончательного двоичного файла (раздел «boot» недоступен). Это вполне естественно, поскольку от него не зависит ld
, но это приводит к неправильной загрузке устройства.
Итак, мой вопрос: каков наилучший способ заставить этот код быть включенным?