如何编译arm9平台...使用哪些特定标志?

时间:2017-02-02 05:11:43

标签: gcc arm

如何验证是否为ARM 9或ARM11编译了可执行文件? 我编译的应用程序如下: - arm-linux-gnueabihf-gcc -march = armv4t -mfloat-abi = hard -mfpu = vfp -marm -Wall sample.c -o sample

其中一个样本是简单的Hello-world的C程序。

以下是objdump -f输出

Attribute Section: aeabi 
File Attributes 
Tag_CPU_name: "7-A" 
Tag_CPU_arch: v7 
Tag_CPU_arch_profile: Application 
Tag_ARM_ISA_use: Yes 
Tag_THUMB_ISA_use: Thumb-2 
Tag_FP_arch: VFPv3-D16 
Tag_ABI_PCS_wchar_t: 4 
Tag_ABI_FP_denormal: Needed 
Tag_ABI_FP_exceptions: Needed 
Tag_ABI_FP_number_model: IEEE 754 
Tag_ABI_align_needed: 8-byte 
Tag_ABI_align_preserved: 8-byte, except leaf SP 
Tag_ABI_enum_size: int 
Tag_ABI_HardFP_use: SP and DP 
Tag_ABI_VFP_args: VFP registers 
Tag_ABI_optimization_goals: Aggressive Speed 
Tag_CPU_unaligned_access: v6

1 个答案:

答案 0 :(得分:0)

这是一个维基帖。 ARM有许多不同的架构,每个架构支持多个CPU。

请参阅:List of ARM CPUs at wikipedia

Gcc支持两种针对ARM生成代码的概念。

  1. 使用-march定位架构。
  2. 使用-mcpu定位特定CPU。
  3. 什么是架构?

    体系结构具有指令集(可能的汇编程序),该体系结构中的CPU之间的相同性为95-100%。有时会添加一些除法,更多/扩展浮点寄存器等指令。但是,目的是编译器可以轻松地输出将在这组CPU(相同架构)上运行的代码。每个新架构都试图向后兼容以前的架构。

    主要区别在于,即使在相同的架构中,系统寄存器也可能在CPU之间存在很大差异。所以系统/操作系统软件会有很大不同。

    如何验证二进制文件所针对的CPU?

    您可以使用objdumpreadelf等工具。任何输出(如 7-A ARMv7-A )都是体系结构参考,您需要知道或查阅表以查找支持的特定CPU。 ARM命名可能令人困惑,因为ARM7与ARMv7完全不同;注意'v'。