2016-09-06 7 views
0

При попытке получить пакет qt5webkit, запущенный на устройстве iMX6 (версия Qt 5.5.0 из версии 2015.11 Buildroot), я вижу утверждения во время выполнения, сгенерированные кодом.Возможные проблемы с пакетом Buildroot qt5webkit

Она проявляется с выходом:

ASSERTION FAILED: 
    isPointerTypeAlignmentOkay(reinterpret_cast<TypePtr>(ptr)) 
    ../WTF/wtf/StdLibExtras.h(102): 
    TypePtr reinterpret_cast_ptr(const void*) 
    [with TypePtr = const unsigned int*] 
Segmentation fault (core dumped) 

код делает проверку Assert следует, и вы можете видеть это на самом деле проверки соосности, чтобы убедиться, что все в порядке:

template<typename Type> bool isPointerTypeAlignmentOkay(Type* ptr) 
{ 
    return !(reinterpret_cast<intptr_t>(ptr) % __alignof__(Type)); 
} 

template<typename TypePtr> TypePtr reinterpret_cast_ptr(const void* ptr) 
{ 
    ASSERT(isPointerTypeAlignmentOkay(reinterpret_cast<TypePtr>(ptr))); 
    return reinterpret_cast<TypePtr>(ptr); 
} 

Теперь я понимаю, поэтому это делается. Из (по общему признанию, затухающей) памяти ранние чипы ARM будут ошибочными, если вы попытаетесь получить неуравновешенный доступ и даже более поздние, которые не ошибались, все равно продолжались медленнее.

Что я не понятно, почему стандартный код с распределением Buildroot не работает. Я довольно уверен, что проблема не в моем собственном коде, так как компиляция и запуск приложения-примера приложения (из пакета qt5webkit-examples Buildroot) демонстрируют ту же проблему.

Утверждение явно находится в секции, которая только скомпилирована для ARM/MIPS под GCC/CLANG, поэтому она очень специфична для этих платформ. Это означает, что вполне возможно, что он никогда не тестировался должным образом.

В настоящем время, я добавил локальный патч в качестве временного решения, в частности, изменениях проверки, чтобы обеспечить выравнивание не имеет значения:

diff --git a/Source/WTF/wtf/StdLibExtras.h b/Source/WTF/wtf/StdLibExtras.h 
--- a/Source/WTF/wtf/StdLibExtras.h 2000-01-01 00:00:00.000000000 +0000 
+++ b/Source/WTF/wtf/StdLibExtras.h 2000-01-01 00:00:00.000000000 +0000 
@@ -86,5 +86,5 @@ 
template<typename Type> 
bool isPointerTypeAlignmentOkay(Type* ptr) 
{ 
- return !(reinterpret_cast<intptr_t>(ptr) % __alignof__(Type)); 
+ return true; 
} 

Однако, у меня есть несколько проблем по этому поводу. Во-первых, действительно ли это безопасно на чипах ARM (в частности, на данный момент варианты Cortex-A9). Это появляется, чтобы работать нормально, но я не уверен, есть ли у меня тонкие краевые случаи, с которыми я должен быть связан. Я еще не обеспокоен возможностью, что она может работать медленнее, особенно если альтернатива заключается в том, что она вообще не работает.

Второй вопрос заключается в том, чтобы попросить кого-нибудь еще получить пакет qt5webkit, работающий на чипах ARM, как часть Buildroot. Я пропустил что-то ослепительно очевидное для посвященного? Если это действительно ошибка в стандартном пакете Buildroot, я, вероятно, в конечном итоге отправлю патч, но я не хочу этого делать, пока не пойму немного лучше.

С точки зрения окружающей среды, мы используем встроенную инструментальную цепочку Buildroot на ящике Ubuntu 14.04.

+0

* "кто-то сумел получить qt5webkit пакет, работающий на чипах ARM в составе Buildroot »* - у меня есть для Cortex-A5, используя Buildroot 2014.08 для qt5webkit 5.3, Buildroot 2015.11.1 для qt5webkit 5.5.0 и Buildroot 2016.05 для qt5webkit 5.5.1. * «Я пропустил что-то ослепительно очевидное ...?» * - Вы никогда не упоминаете о своей среде и инструментальной цепочке; это может быть фактором. Я использую более старую gcc 4.8.3 toolchain, построенную с использованием crosstool-ng. – sawdust

+0

@sawdust, среда-хост Ubuntu 14.04 и использует встроенную инструментальную цепочку Buildroot.Я уточню вопрос. – paxdiablo

ответ

0

Try нижеуказанных целевые параметры в Buildroot конфигурационного меню:

  1. Выберите Включить поддержку расширений NEON SIMD
  2. Set стратегия с плавающей точкой VFPv3-D16