Estoy escribiendo un script de arranque para un dispositivo basado en ARM-Cortex M3. Si compilo el script de arranque del ensamblador y el código de la aplicación C, y luego combino los archivos del objeto y los transfiero a mi dispositivo, todo funciona.GNU ld quita la sección
Sin embargo, si uso ar
para crear un archivo (libboot.a) y combinar ese archivo con la aplicación C hay un problema:
He puesto el código de arranque en una sección:
.section .boot, "ax"
.global _start
_start:
.word 0x10000800 /* Initial stack pointer (FIXME!) */
.word start
.word nmi_handler
.word hard_fault_handler
... etc ...
He encontrado que ld
lo quita del binario final (la sección "arranque" no está disponible). Esto es bastante natural ya que no existe una dependencia de él que ld
conoce, pero hace que el dispositivo no se inicie correctamente.
Así que mi pregunta es: ¿cuál es la mejor manera de forzar este código para ser incluido?