怎麼知道一個 ARM elf object file 是否使用 hardfp ABI 呢? 用 readelf 比較一下即可
/* test.c */
int main()
{

return 0;
}

arm-linux-gnueabi-gcc -mcpu=cortex-a9 -mfloat-abi=softfp -o test test.c

arm-linux-gnueabi-readelf test

...

Tag_CPU_name: "Cortex-A9"

Tag_CPU_arch: v7

Tag_CPU_arch_profile: Application

Tag_ARM_ISA_use: Yes

Tag_THUMB_ISA_use: Thumb-2

Tag_FP_arch: VFPv2

Tag_ABI_PCS_wchar_t: 4

Tag_ABI_FP_rounding: Needed

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_CPU_unaligned_access: v6

Tag_MPextension_use: Allowed

Tag_Virtualization_use: TrustZone

arm-linux-gnueabihf-gcc -mcpu=cortex-a9 -mfloat-abi=hardfp -o testhf test.c

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_rounding: Needed

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_CPU_unaligned_access: v6

Tag_MPextension_use: Allowed

Tag_Virtualization_use: TrustZone

主要的差異是在傳遞 float/double 這樣的參數時, 是否以 VFP register 完成.