ARM mode Thumb: Code Taille ne diminue pas
-
29-09-2019 - |
Question
Les gars,
J'ai un projet que j'ai compilé pour le processeur ARM Cortex-A8. Je fais usage de GCC pour le faire. Actuellement, la taille de mon exécutable est 220,1 KB. Maintenant, je modifie mon makefile et ajouter le -mthumb
de drapeau, les regards de ligne de makefile un peu comme ça -
gcc -mcpu=cortex-a8 -mthumb -marm -mfloat-abi=softfp -mfpu=neon
Je le fais des changements dans tous mes makefiles et je construis mon projet, mais l'exécutable je reçois enfin continue à être de 220,1 Ko.
J'ai fait un changement plus à ma ligne de commande, j'ai ajouté l'option -mthumb-interfonctionnement
gcc -mcpu=cortex-a8 -mthumb -mthumb-interwork -marm -mfloat-abi=softfp -mfpu=neon
Encore une fois, je reçois la même taille exécutable 220,1 KB. Am tout ce que je manque en faisant cela?
J'ai écrit un petit programme, pour trouver le plus petit des deux nombres et je compilé à l'aide de la ligne de commande suivante
gcc main.c -o main
je reçois un fichier exécutable 8.5 Ko
Ensuite, je fais un
gcc -mthumb main.c -o main
je reçois encore un exécutable 8.5 Ko.
Quel est le problème ici?
Je l'ai fait un cat /proc/cpuinfo
pour voir si le pouce est vraiment pris en charge par mon processeur, et je vois qu'il est en effet pris en charge.
Je reçois -
Processor: ARMv7 Processor rev 5 (v7l)
Features: swp half thumb fastmult vfp edsp neon vfpv3
....
....
La solution
Je pense que vous avez des moyens -marm un bras sans le pouce, essayez de supprimer -marm.
Autres conseils
Il est difficile de dire sans avoir le code réel, mais j'ai quelques suggestions.
- Activer les optimisations. (Par exemple, -O3 -ffunction-sections -fdata-sections)
- Strip l'exécutable pour vous assurer que les informations de débogage est pas pris en compte.
- Vérifiez la taille réelle du code (.text), et non la taille du fichier. Peut-être il y a un rembourrage en cours. Vous pouvez utiliser objdump pour cela.
- Vider le code assembleur (commutateur -S) et vérifier qu'il produit en fait des instructions de bras dans un cas, et le pouce dans un autre.
Avec certains compilateurs, le pouce est la valeur par défaut lors de la compilation pour ARMv7. Etes-vous sûr que votre exécutable d'origine n'a pas été construit pour le pouce?
Essayez de construire avec -mno-pouce et voir si l'augmentation de la taille du code.