AlignAsStackVariable测试因nplb而失败

时间:2017-10-24 09:53:24

标签: cobalt

使用钴版本11,使用NPLB的AlignAsStackVariable测试会失败,但是当我们从nplb测试文件(starboard / nplb / align_test.cc)复制测试代码时,交叉编译并在同一个arm平台上运行,然后它按预期排列,所以它似乎是NPLB的问题(没有工具链或平台的问题),有人可以看看吗?

// NPLB案例失败:

[ RUN      ] SbAlignTest.AlignAsStackVariable
../../starboard/nplb/align_test.cc:117: Failure
Expected: (32) <= (GetAlignment(&by_32)), actual: 32 vs 16
../../starboard/nplb/align_test.cc:118: Failure
Expected: (64) <= (GetAlignment(&by_64)), actual: 64 vs 16
../../starboard/nplb/align_test.cc:119: Failure
Expected: (128) <= (GetAlignment(&by_128)), actual: 128 vs 16
../../starboard/nplb/align_test.cc:120: Failure
Expected: (256) <= (GetAlignment(&by_256)), actual: 256 vs 16
[  FAILED  ] SbAlignTest.AlignAsStackVariable (1 ms)

//测试代码对齐OK:

GetAlignment sizeof(size_t)=4
GetAlignment align=2
GetAlignment align=4
GetAlignment align=8
GetAlignment align=16
GetAlignment align=32
GetAlignment align=64
GetAlignment align=128
GetAlignment align=256

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

我不确定你的意思“但是当我们从nplb测试文件(starboard / nplb / align_test.cc)复制测试代码时,交叉编译它并在同一个arm平台上运行它”......是你用相同的编译器标志编译?难道它只是巧合,它超出了你复制代码的环境吗? align_test.cc的代码非常简单,基本上只是确保您的SB_ALIGNAS()实现正常工作。

此外,正如您在测试中所看到的,nplb理解并非所有平台/工具链都能够进行大于16字节的堆栈变量对齐,因此在这种情况下,您应该在平台的configuration_public.h文件中定义SB_HAS_QUIRK_DOES_NOT_STACK_ALIGN_OVER_16_BYTES告知测试和Cobalt您的平台/工具链无法执行大于16个字节的堆栈对齐。