Estoy tratando de compilar para un procesador de brazo incorporado usando gcc-arm-linux-gnueabi
y -nostdlib
para eliminar las dependencias de las bibliotecas c y los archivos de inicio. El chip no tiene forma de interpretar archivos elfos, por lo que usar objcopy -O binary
, puedo quitarle los encabezados elfos. Sin embargo, si dejo el ID de compilación, entonces el binario tiene el ID de compilación al comienzo de la salida, por lo que no se ejecuta. Puedo eliminar la identificación de compilación en el script del enlazador usando /DISCARD/ : { *(.note.gnu.build-id) *(.ARM.attributes) }
sin embargo, el enlazador advierte sobre .note.gnu.build-id section discarded, --build-id ignored.
. Si bien esto funciona bien, y el código se ejecuta bien en el chip, me gustaría no tener que pasar y luego soltar la ID de compilación. ¿Hay alguna manera de instruir gcc
para pasar comandos al enlazador sin pasar también --build-id
?
Samuel Edwin Ward
Creo que estas opciones harán lo que quieras:
-Wl,--build-id=none
Pasar none por estilo deshabilita la configuración de cualquier opción –build-id anterior en la línea de comando.
-
Brillante, gracias. Vi que los tipos de hash sha1/md5 estaban disponibles, pero no los detecté.
none
.– David Madera
10 de marzo de 2013 a las 14:54
Esta es una publicación antigua, pero vale la pena afirmar para la posteridad que no tiene que descartar la ID de compilación. Su alternativa es moverlo a otra área de flash editando su secuencia de comandos del enlazador.
Simplemente mueva la ID de compilación a algún lugar después de su tabla de vectores en su sección de texto:
.text :
{
. = ALIGN(4);
_stext = .;
KEEP(*(.vectors .vectors.*))
KEEP(*(.note.gnu.build-id))
*(.text .text.*)
*(.rodata .rodata*)
. = ALIGN(4);
_etext = .;
} > rom
Esto mantendrá su tabla de vectores en la dirección 0x0 (su MCU probablemente lo requiera), pero también le permitirá leer la ID de compilación del código, ¡lo que podría ser útil!
-
Si puede comunicarse con el dispositivo de alguna manera después de implementar el código, es posible que desee agregar un símbolo que apunte también a la ID de compilación para que pueda leerlo desde el código mismo y enviarlo para el diagnóstico.
_build_id = .
después de laKEEP(*(.note.gnu.build-id))
– tontería
1 oct 2019 a las 11:16
Puedes usar el
-Wl,<LINKER_OPTION>
si desea pasar una opción de enlace degcc
. ¿Es eso lo que estás preguntando?– Tuxdude
9 de marzo de 2013 a las 22:02
Siempre puedes usar el
--remove-section
opción aobjcopy
también.– café
9 de marzo de 2013 a las 22:11
O puede colocar la ID de compilación en otro lugar que no sea el inicio, si puede resultar útil.
– tc.
10/03/2013 a las 17:30