Modalità Thumb ARM: Codice dimensione non diminuendo
-
29-09-2019 - |
Domanda
Ragazzi,
Ho un progetto che ho compilato per il processore ARM Cortex-A8. Sto facendo uso di GCC per fare questo. Attualmente le dimensioni del mio eseguibile è 220,1 KB. Ora modifico il mio makefile e aggiungo il -mthumb
bandiera, gli sguardi di linea makefile un po 'come questo -
gcc -mcpu=cortex-a8 -mthumb -marm -mfloat-abi=softfp -mfpu=neon
Lo faccio cambiamenti in tutti i miei makefile e io costruisco il mio progetto, ma l'eseguibile ricevo finalmente continua ad essere di 220,1 KB.
ho fatto più un cambio alla mia linea di comando, ho aggiunto l'opzione -mthumb-Interwork
gcc -mcpu=cortex-a8 -mthumb -mthumb-interwork -marm -mfloat-abi=softfp -mfpu=neon
Ancora una volta ho la stessa dimensione eseguibile 220,1 KB. Mi manca nulla mentre si fa questo?
Ho scritto un piccolo programma, per trovare il più piccolo dei due numeri e ho compilato utilizzando la seguente riga di comando
gcc main.c -o main
ho un 8,5 KB eseguibile
Avanti, faccio un
gcc -mthumb main.c -o main
I ancora ottenere un 8,5 KB eseguibile.
Cosa c'è di sbagliato qui?
Ho fatto un cat /proc/cpuinfo
per vedere se il pollice è davvero supportato da mio processore, e vedo che è davvero supportato.
Ottengo -
Processor: ARMv7 Processor rev 5 (v7l)
Features: swp half thumb fastmult vfp edsp neon vfpv3
....
....
Soluzione
Credo mezzi -marm avete un braccio senza il pollice, provare a rimuovere -marm.
Altri suggerimenti
E 'difficile da dire senza avere il codice vero e proprio, ma ho un paio di suggerimenti.
- Abilita ottimizzazioni. (Ad esempio -O3 -ffunction-sezioni -fdata sezioni)
- Striscia l'eseguibile per assicurarsi che le informazioni di debug non viene conteggiato.
- Controlla la dimensione del codice (.text) reale, non la dimensione del file. Forse c'è un po 'di imbottitura in corso. È possibile utilizzare objdump per questo.
- Dump il codice assembly (interruttore -S) e verificare che essa produce effettivamente istruzioni ARM in un caso e pollice in un altro.
Con alcuni compilatori, il pollice è l'impostazione predefinita quando si compila per ARMv7. Sei sicuro che il vostro eseguibile originale non è stato costruito per il pollice?
Prova edificio con -mno-pollice e vedere se l'aumento delle dimensioni del codice.