2010-11-05 16 views
5

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 modifico mi makefile y añado la bandera -mthumb, la línea makefile se ve algo como esto -ARM Modo de pulgar: Código Tamaño no disminuye

gcc -mcpu=cortex-a8 -mthumb -marm -mfloat-abi=softfp -mfpu=neon 

hago esto cambia en todos mis archivos make y construir mi proyecto, pero el ejecutable se produce finalmente todavía sigue ser de 220.1 KB.

Hice un cambio más a mi línea de comandos, he añadido la opción -mthumb-funcionen conjuntamente

gcc -mcpu=cortex-a8 -mthumb -mthumb-interwork -marm -mfloat-abi=softfp -mfpu=neon 

Una vez más consigo mismo tamaño ejecutable 220,1 KB. ¿Me estoy perdiendo algo mientras hago esto?

me escribió un pequeño programa, para encontrar el más pequeño de los dos números y yo compilado usando la siguiente línea de comandos

gcc main.c -o main 

consigo un ejecutable de 8,5 KB

A continuación, hago un

gcc -mthumb main.c -o main 

Todavía obtengo un archivo ejecutable de 8,5 KB.

¿Qué sucede aquí?

Hice un cat /proc/cpuinfo para ver si el pulgar es realmente compatible con mi procesador, y veo que sí es compatible. llego -

Processor: ARMv7 Processor rev 5 (v7l) 
Features: swp half thumb fastmult vfp edsp neon vfpv3 
.... 
.... 
+0

'-marm' es el contador de' -mthumb' y 'gcc' toma la última opción; Esta es la razón por la cual la respuesta de * dwelch * funciona. –

Respuesta

6

Creo que -marm significa que tiene un brazo sin pulgar, intente quitar -marm.

+1

Creo que es así, es bastante fácil de demostrar, pruebe -S -mthumb -marm en un archivo pequeño con una función pequeña y vea que genera código de armado porque el -marma es lo último que le pidió que hiciera. luego cámbialo a -marm -mthumb, con -mthumb último genera código de pulgar.Así que tener -mármaco por última vez supera todas las cosas del pulgar que estás tratando de hacer. –

+1

En caso de duda, utilice "gcc -save-temps" para conservar el archivo asm, u "objdump -d" en el código objeto para un desmontaje. La diferencia entre ARM y Thumb es bastante fácil de detectar según el ancho de las instrucciones (ARM son siempre 4 bytes, Thumb es 2 bytes, Thumb2 es 2 o 4). He visto casos en los que Pulgar fadden

+0

+1 para lograr tener un brazo sin pulgar. –

0

Con algunos compiladores, el pulgar es el valor predeterminado cuando se compila para ARMv7. ¿Estás seguro de que tu ejecutable original no fue construido para el pulgar?

Pruebe compilar con -mno-thumb y vea si el tamaño del código aumenta.

+0

Stephen lo hice, una vez más, 220.1 KB. ¡Ningún cambio! – HaggarTheHorrible

2

Es difícil de decir sin tener el código real, pero tengo un par de sugerencias.

  1. Habilite las optimizaciones. (por ejemplo -O3 -ffunction-sections -fdata-sections)
  2. Elimine el ejecutable para asegurarse de que la información de depuración no se cuente.
  3. Compruebe 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.
  4. Vuelque el código de ensamblaje (-S-switch) y verifique que realmente produce instrucciones ARM en un caso y Thumb en otro.
Cuestiones relacionadas