¿Cuándo se necesitan GAS ELF las directivas .type, .thumb, .size y .section?
Estoy trabajando en un programa de ensamblaje para un microcontrolador basado en ARM Cortex-M3 (conjunto de instrucciones Thumb 2), usando GNU como.
En algún código de ejemplo, encuentro directivas como.size
, .section
y.type
que entiendo son las directivas ELF. Como ejemplo:
.section .text.Reset_Handler
.weak Reset_Handler
.type Reset_Handler, %function
Reset_Handler:
bl main
b Infinite_Loop
.size Reset_Handler, .-Reset_Handler
los
.type
Se dice que la directiva establece el tipo de un símbolo, generalmente ya sea en% object (que significa datos) o en% function. No sé qué diferencia hace. No siempre se incluye, por lo que no estoy seguro de cuándo debe usarse.También relacionado con esto es el.thumb_func
directiva. Por lo que he leído, parece quepodría ser equivalente a:
.thumb
.type Symbol_Name, %function
O es algo completamente diferente?
.size
supuestamente establece el tamaño asociado con un símbolo. Cuando esto es necesario, no tengo idea. ¿Se calcula esto de forma predeterminada, pero se puede anular con esta directiva? Si es así, ¿cuándo desea anular?.section
es más fácil encontrar documentos, y creo que tengo una idea clara de lo quehace, pero todavía estoy un poco inseguro sobre el uso. Según tengo entendido, cambia entre diferentes secciones ELF (text
para el código,data
para datos grabables,bss
para datos no inicializados,rodata
para constantes y otros), y define otros nuevos cuando se desee. Supongo que cambiaría entre estos dependiendo de si define código, datos, datos no inicializados, etc. Pero, ¿por qué crearía una subsección para una función, como en el ejemplo anterior?Cualquier ayuda con esto es apreciado. Si puede encontrar enlaces a tutoriales o documentos que explican esto con mayor detalle, preferiblemente comprensible para un novato, estaría muy agradecido.Hasta ahora, elUsando como El manual ha sido de alguna ayuda, tal vez puedas sacarle más provecho que yo, con más conocimiento.