1
我正在编译一个使用APP_ABI = armeabi来定位ARMv5 cpu的NDK项目。我有处理浮点的代码,在低端的HTC Wildfire ARMv6设备上运行时,我发现我遇到了SIGILL的崩溃。Android NDK SIGILL在ARMv6设备上的fpu指令上崩溃
拆卸二进制显示,它崩溃正是这里
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
你是对的。标志-mfloat-abi = softfp生成像vldr这样的硬件浮点字节码,而不是像这样的旧CPU所需的eabi_xxx指令。谢谢。 – ericb