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)
어설 확인을하는 코드는 다음, 당신이 그것을 실제로 괜찮아 보장하기 위해 정렬을 확인하는 것 볼 수 있습니다
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 패키지에서) 같은 문제가 발생하기 때문에 문제가 내 자신의 코드에 없다는 것을 확신합니다.
어설 션은 분명히 GCC/CLANG에서 ARM/MIPS 용으로 컴파일 된 섹션 내에 있으므로 해당 플랫폼에만 적용됩니다. 즉, 제대로 테스트 된 적이 전혀 없다는 것을 의미합니다. 지금은
, 나는 특히 정렬을 보장하기 위해 검사를 변경, 해결 방법으로 로컬 패치를 추가 무관 한 :
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 변형)에서 실제로 안전한지 여부입니다. 그것은 가 나타납니다 괜찮아요하지만 난 걱정해야 할 미묘한 가장자리의 경우에는 잘 모르겠습니다. 나는 그것이 느리게 진행될 수있는 가능성에 대해 아직 염려하지 않고있다. 특히 대안이 전혀 실행되지 않는다면 더욱 그렇다.
두 번째 질문은 다른 사람이 Buildroot의 일부로 ARM 칩에서 작동하는 qt5webkit
패키지를 가져올 수 있는지를 묻는 것입니다. 나는 시작된 것에 대해 눈에 띄게 무언가를 놓치고 있습니까? 실제로 표준 Buildroot 패키지의 결함이라면 아마도 패치를 제출하게 될 것이지만 조금 더 잘 이해할 때까지는 그렇게하지 않으려 고합니다.
환경 측면에서 우리는 우분투 14.04 호스트 상자에서 Buildroot 내부 툴 체인을 사용하고 있습니다. buildroot의 menuconfig를에
* "다른 사람은 qt5webkit를 얻을 수있게되었다 Qt5webkit 5.3에 Buildroot 2014.08, qt5webkit 5.5.0에 Buildroot 2015.11.1, qt5webkit 5.5.1에 Buildroot 2016.05를 사용하여 Cortex-A5를 사용하고 있습니다. * "나는 눈부신 뭔가를 놓치고 있습니까?"* - 당신은 당신의 호스트 환경과 툴체인을 언급하지 않습니다. 그것들은 공헌 요인이 될 수 있습니다. 나는 crosstool-ng를 사용하여 만든 구형 gcc 4.8.3 툴체인을 사용하고 있습니다. – sawdust
@sawdust, 호스트 환경은 우분투 14.04이며 Buildroot 내부 툴 체인을 사용하고 있습니다.나는 그 질문을 갱신 할 것이다. – paxdiablo