Buildroot qt5webkit 包可能出现的问题
Possible problems with Buildroot qt5webkit package
在尝试在 iMX6 设备上获取 qt5webkit
包 运行ning(来自 2015.11
Buildroot 版本的 Qt 版本 5.5.0
),我看到 运行-代码生成的时间断言。
它通过输出表现出来:
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 变体)。它 出现 到 运行 没问题,但我不确定是否有我应该关注的微妙边缘情况。我还不担心它可能 运行 变慢的可能性,特别是如果替代方案是它根本不 运行。
第二个问题只是想问一下是否有其他人设法让 qt5webkit
包作为 Buildroot 的一部分在 ARM 芯片上运行。我是否遗漏了一些对新手来说非常明显的东西?如果确实是标准 Buildroot 包中的错误,我可能最终会提交一个补丁,但在我更好地理解它之前我不想这样做。
就环境而言,我们在 Ubuntu 14.04 主机箱上使用 Buildroot 内部工具链。
在 buildroot 菜单配置中尝试以下目标选项:
- Select 启用 NEON SIMD 扩展支持
- 将浮点策略设置为 VFPv3-D16
在尝试在 iMX6 设备上获取 qt5webkit
包 运行ning(来自 2015.11
Buildroot 版本的 Qt 版本 5.5.0
),我看到 运行-代码生成的时间断言。
它通过输出表现出来:
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 变体)。它 出现 到 运行 没问题,但我不确定是否有我应该关注的微妙边缘情况。我还不担心它可能 运行 变慢的可能性,特别是如果替代方案是它根本不 运行。
第二个问题只是想问一下是否有其他人设法让 qt5webkit
包作为 Buildroot 的一部分在 ARM 芯片上运行。我是否遗漏了一些对新手来说非常明显的东西?如果确实是标准 Buildroot 包中的错误,我可能最终会提交一个补丁,但在我更好地理解它之前我不想这样做。
就环境而言,我们在 Ubuntu 14.04 主机箱上使用 Buildroot 内部工具链。
在 buildroot 菜单配置中尝试以下目标选项:
- Select 启用 NEON SIMD 扩展支持
- 将浮点策略设置为 VFPv3-D16