APP_ABI=armeabi を使用して ARMv5 CPU をターゲットとする NDK プロジェクトをコンパイルしています。浮動小数点を扱うコードがあり、ローエンドの 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
それでも、上記のバイナリ コードが生成されます。float 命令が実際にソフト コードを生成するようにするには、どのパラメーターを指定すればよいですか? それとも、このデバイスは完全に壊れていますか? 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