1

我正在使用 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
4

1 回答 1

1

请运行ndk-build -B V=1命令并发布输出。否则我们看不到在编译过程中使用的真正的编译器标志。

无论如何,-mfloat-abi=softfp标志意味着硬件浮点。要强制软件仿真,您应该使用-mfloat-abi=soft选项。

于 2011-08-28T20:44:17.687 回答