ndk sigbus adraln после свича от gcc до лягушки - PullRequest
0 голосов
/ 11 декабря 2018

Мы используем r12b ndk с gcc для создания нашей библиотеки c ++ (с предварительно созданной библиотекой и указанием флагов вручную) и наших зависимостей (boost 1.66, openssl ... и т. Д. С автономным набором инструментов).Когда мы переключаемся на clang (как в r18b, так и в r12b), он начинает иметь сбой signal 7 (SIGBUS), code 1 (BUS_ADRALN) ТОЛЬКО на Nexus 4. Я пробовал это на Nexus 5X и LG G6 (в режиме armv7), ни один из них не падает.

ndk-stack говорит, что сбой находится на Routine aligned at /boost/atomic/detail/storage_type.hpp:91, но сообщение от Undefined Behavior Sanitizer указывает, что он уже получает указатель адреса смещения, прежде чем он вызовет функцию boost. runtime error: constructor call on misaligned address 0x9b2a5008 for type 'class1', which requires 16 byte alignment 0x9b2a5008: note: pointer points here

После добавления -Wover-выравнивается, появляется следующее сообщение.Флаги error: type 'test1' requires 16 bytes of alignment and the default allocator only guarantees 8 bytes [-Werror,-Wover-aligned] и -fnew-alignment=16 -falign-functions -faligned-new -faligned-allocation помогают отключить предупреждение.Но у него все та же авария с сигбусом.

Я не в себе.Любое предположение, предложение поможет.Спасибо.

РЕДАКТИРОВАТЬ: мы используем API-уровень 21 для ндк.

1 Ответ

0 голосов
/ 20 февраля 2019

Мы решили это месяц назад.Хочу написать быстрое обновление здесь, надеюсь, может помочь кому-то, имеющему подобную проблему.

Вот трассировка стека у нас была


****** Crash dump: **********
Build fingerprint: 'google/occam/mako:5.1.1/LMY48T/2237560:user/release-keys'
#00 0x002975a8 /data/app/test-2/lib/arm/libnative-lib.so (**redact**)boost::atomics::detail::make_storage_type<1u, false>::aligned::aligned(unsigned char)
/include/boost/atomic/detail/storage_type.hpp:91:85
boost::atomics::detail::base_atomic<bool, int>::base_atomic(bool)
/include/boost/atomic/detail/atomic_template.hpp:496:0
boost::atomics::atomic<bool>::atomic(bool)
/include/boost/atomic/detail/atomic_template.hpp:748:0

Мой руководитель группы указал мне, вероятно, что-то естьнеправильно в boost::atomic.Таким образом, мы заменили все boost::atomic на std::atomic.Это сработало!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...