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 -mthumb
, 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
....
....
Thumb code is typically 65% of the size of ARM code, and provides 160% of the performance of ARM code when running from a 16-bit memory system. Thumb, therefore, makes the ARM7TDMI core ideally suited to embedded applications with restricted memory bandwidth, where code density and footprint is important.
To direct the assembler to generate ARM or Thumb instruction encodings, you must set the assembler mode using an ARM or THUMB directive. To generate ThumbEE code, use the THUMBX directive. Assembly code using CODE32 and CODE16 directives can still be assembled, but ARM recommends using ARM and THUMB for new code.
Notice that the 12 registers accessible in Thumb state are exactly the same physical 32-bit registers accessible in ARM state. Thus data can be passed between software running in the ARM state and software running in the Thumb state via registers R0 through R7. This is done frequently in actual applications.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With