ARM Thumb模式:代码大小不减少

时间:2010-11-05 15:39:56

标签: compilation arm thumb cortex-a

球员, 我有一个项目,我已经为ARM Cortex-A8处理器编译。我正在利用GCC来做到这一点。目前我的可执行文件的大小是220.1 KB。现在我修改了我的makefile并添加了标志-mthumb,makefile行看起来有点像这样 -

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

我在所有makefile中进行了此更改,并构建了我的项目,但最终得到的可执行文件仍然是220.1 KB。

我对命令行再做了一次更改,我添加了-mthumb-interwork选项

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

我再次获得相同大小的可执行文件220.1 KB。这样做我错过了什么吗?

我写了一个小程序,找到两个数字中最小的一个,然后使用以下命令行编译它

gcc main.c -o main

我得到一个8.5 KB的可执行文件

接下来,我做了一个

gcc -mthumb main.c -o main

我仍然可以获得8.5 KB的可执行文件。

这里有什么问题?

我做了一个cat /proc/cpuinfo,看看我的处理器是否真的支持拇指,我发现确实支持它。 我明白了 -

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

3 个答案:

答案 0 :(得分:6)

我认为-marm意味着你的手臂没有拇指,请尝试删除-marm。

答案 1 :(得分:2)

没有实际代码很难说,但我有几点建议。

  1. 启用优化。 (例如-O3 -ffunction-sections -fdata-sections)
  2. 删除可执行文件以确保不计算调试信息。
  3. 检查实际代码(.text)大小,而不是文件大小。也许有一些填充物正在进行中。你可以使用objdump。
  4. 转储汇编代码(-S开关)并检查它是否在一个案例中实际生成ARM指令而在另一个案例中生成Thumb。

答案 2 :(得分:0)

对于一些编译器,在编译ARMv7时,thumb是默认设置。你确定你的原始可执行文件不是用拇指构建的吗?

尝试使用-mno-thumb进行构建,并查看代码大小是否增加。