我正在使用 APP_ABI=armeabi 编译一个 NDK 项目以针对 ARMv5 cpu。我有处理浮点的代码,当在低端 HTC Wildfire ARMv6 设备上运行时,我发现我遇到了 SIGILL 崩溃。
反汇编二进制文件显示它恰好在此处崩溃
4397a8: ed9f7b18 vldr d7, [pc, #96]
为什么当我指定 APP_ABI=armeabi 时 NDK 生成 fp 指令,不应该是 eabi 调用,而不是明确的霓虹灯代码?为了排除故障,我什至将它添加到 mk 文件中:
LOCAL_CFLAGS := -mfloat-abi=softfp -msoft-float -mfpu=vfp
然而它仍然会生成上面的二进制代码。我应该指定什么参数来确保我的浮点指令实际生成软代码?或者,这个设备是否完全坏了?这是CPU信息:
>adb shell getprop | grep abi
[ro.product.cpu.abi]: [armeabi]
>adb shell cat /proc/cpuinfo
Processor : ARMv6-compatible processor rev 2 (v6l)
BogoMIPS : 244.94
Features : swp half thumb fastmult edsp java
CPU implementer : 0x41
CPU architecture: 6TEJ
CPU variant : 0x1
CPU part : 0xb36
CPU revision : 2
Hardware : buzz
Revision : 0081
Serial : 0000000000000000