ARMv5 cpuをターゲットにするために、APP_ABI = armeabiを使用してNDKプロジェクトをコンパイルしています。浮動小数点を扱うコードがあり、ローエンドのHTC Wildfire ARMv6デバイスで実行すると、SIGILLでクラッシュすることがわかります。バイナリを分解ARMv6デバイスのfpu命令でAndroid NDK SIGILLがクラッシュする
が、それは私がAPP_ABI = armeabiを指定したときに、なぜNDKは、FP命令を生成しているまさにここ
4397a8: ed9f7b18 vldr d7, [pc, #96]
をクラッシュすることを示し、EABIの呼び出しではなく、明示的にネオンのコードであるために仮定されていませんか?トラブルシューティングのために、私はmkファイルにこれを追加しました:
LOCAL_CFLAGS := -mfloat-abi=softfp -msoft-float -mfpu=vfp
まだそれでも上記のバイナリコードが生成されます。フロート命令が実際にソフトコードを生成するためには、どのパラメータを指定する必要がありますか?または、このデバイスはちょうど完全に壊れていますか?
>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は、このような古いCPUに必要なeabi_xxx命令の代わりに、vldrのようなハードウェア浮動小数点バイトコードを生成します。ありがとう。 – ericb