Guys,
I have a project which I have compiled for the ARM Cortex-A8 processor. I'm making use of GCC to do this. Currently the size of my executable is 220.1 KB. Now I modify my makefile and I add the flag -mthu开发者_运维百科mb
, the makefile line looks somewhat like this -
gcc -mcpu=cortex-a8 -mthumb -marm -mfloat-abi=softfp -mfpu=neon
I do this changes in all my makefiles and I build my project, but the executable I get finally still continues to be of 220.1 KB.
I made one more change to my command line, I added the -mthumb-interwork option
gcc -mcpu=cortex-a8 -mthumb -mthumb-interwork -marm -mfloat-abi=softfp -mfpu=neon
Once again I get the same sized executable 220.1 KB. Am I missing anything while doing this?
I wrote a small program, to find the smallest of two numbers and I compiled it using the following command line
gcc main.c -o main
I get a 8.5 KB executable
Next, I do a
gcc -mthumb main.c -o main
I still get a 8.5 KB executable.
Whats wrong here?
I did a cat /proc/cpuinfo
to see if thumb is really supported by my processor, and I see that it is indeed supported.
I get -
Processor: ARMv7 Processor rev 5 (v7l)
Features: swp half thumb fastmult vfp edsp neon vfpv3
....
....
I think -marm means you have an arm with no thumb, try removing -marm.
It's hard to say without having the actual code, but I have a couple of suggestions.
- Enable optimizations. (e.g. -O3 -ffunction-sections -fdata-sections)
- Strip the executable to make sure the debug info is not counted.
- Check the actual code (.text) size, not the file size. Maybe there is some padding going on. You can use objdump for that.
- Dump the assembly code (-S switch) and check that it actually produces ARM instructions in one case and Thumb in another.
With some compilers, thumb is the default when compiling for ARMv7. Are you sure that your original executable wasn't built to thumb?
Try building with -mno-thumb and see if the code size increases.
精彩评论