1

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
4

1 に答える 1

1

コマンドを実行ndk-build -B V=1して、出力を投稿してください。そうしないと、コンパイル中に使用される実際のコンパイラ フラグを確認できません。

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

于 2011-08-28T20:44:17.687 に答える