Сбой Android NDK SIGILL по инструкции fpu на устройстве ARMv6 - PullRequest
1 голос
/ 28 августа 2011

Я компилирую проект NDK, используя APP_ABI = armeabi для целевого процессора ARMv5.У меня есть код, который работает с плавающей запятой, и при работе на младшем устройстве HTC Wildfire ARMv6 я вижу, что у меня происходит сбой с SIGILL.

Разборка двоичного файла показывает, что он падает именно здесь

4397a8:       ed9f7b18        vldr    d7, [pc, #96]

Почему NDK генерирует команду fp, когда я указал APP_ABI = armeabi, не должен ли это быть вызов 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 Ответ

1 голос
/ 29 августа 2011

Пожалуйста, запустите команду ndk-build -B V=1 и опубликуйте вывод. В противном случае мы не сможем увидеть реальные флаги компилятора, используемые во время компиляции.

В любом случае, флаг -mfloat-abi=softfp означает аппаратную плавающую точку. Для принудительной эмуляции программного обеспечения вы должны использовать опцию -mfloat-abi=soft.

...