2011-08-28 6 views
1

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 

答えて

1

ndk-build -B V=1コマンドを実行し、出力を投稿してください:ここではCPU情報です。それ以外の場合は、コンパイル時に使用される実際のコンパイラフラグは見えません。

いずれにしても、-mfloat-abi=softfpフラグはハードウェア浮動小数点を意味します。ソフトウェアエミュレーションを強制するには、-mfloat-abi=softオプションを使用する必要があります。

+0

あなたは正しいですか?フラグ-mfloat-abi = softfpは、このような古いCPUに必要なeabi_xxx命令の代わりに、vldrのようなハードウェア浮動小数点バイトコードを生成します。ありがとう。 – ericb

関連する問題