compilation - ventilatorio - ARM Modo de pulgar: el tamaño del código no disminuye
ventilacion mecanica pdf 2017 (3)
Chicos, tengo un proyecto que he compilado para el procesador ARM Cortex-A8. Estoy haciendo uso de GCC para hacer esto. Actualmente el tamaño de mi ejecutable es de 220.1 KB. Ahora -mthumb
mi makefile y agrego el flag -mthumb
, la línea makefile se ve algo así:
gcc -mcpu=cortex-a8 -mthumb -marm -mfloat-abi=softfp -mfpu=neon
Hago estos cambios en todos mis makefiles y construyo mi proyecto, pero el ejecutable que obtengo finalmente sigue siendo de 220.1 KB.
Hice un cambio más en mi línea de comando, agregué la opción -mthumb-interwork
gcc -mcpu=cortex-a8 -mthumb -mthumb-interwork -marm -mfloat-abi=softfp -mfpu=neon
Una vez más obtengo el mismo tamaño del archivo ejecutable 220.1 KB. ¿Me estoy perdiendo algo mientras hago esto?
Escribí un pequeño programa para encontrar el más pequeño de dos números y lo compilé usando la siguiente línea de comando
gcc main.c -o main
Obtengo un ejecutable de 8.5 KB
Luego, hago un
gcc -mthumb main.c -o main
Todavía obtengo un ejecutable de 8.5 KB.
¿Qué pasa aquí?
Hice un cat /proc/cpuinfo
para ver si mi procesador realmente admite el pulgar, y veo que de hecho es compatible. Yo obtengo -
Processor: ARMv7 Processor rev 5 (v7l)
Features: swp half thumb fastmult vfp edsp neon vfpv3
....
....
Con algunos compiladores, el pulgar es el valor predeterminado al compilar para ARMv7. ¿Estás seguro de que tu ejecutable original no fue construido para el pulgar?
Intente compilar con -mno-thumb y vea si el tamaño del código aumenta.
Es difícil de decir sin tener el código real, pero tengo un par de sugerencias.
- Habilita optimizaciones. (por ejemplo -O3 -ffunction-sections -fdata-sections)
- Pele el ejecutable para asegurarse de que la información de depuración no se cuente.
- Verifique el tamaño real del código (.text), no el tamaño del archivo. Tal vez hay algo de relleno pasando. Puedes usar objdump para eso.
- Vuelque el código de ensamblaje (-S-switch) y compruebe que en realidad produce instrucciones ARM en un caso y Thumb en otro.
Creo que "marm" significa que tienes un brazo sin pulgar, intenta eliminar -marm.