首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SunCC在bfd_asm.c中崩溃的原因是什么?

SunCC在bfd_asm.c中崩溃的原因是什么?
EN

Stack Overflow用户
提问于 2018-07-16 00:13:55
回答 1查看 78关注 0票数 2

我正在试图找出SunCC编译器崩溃的原因。它已经存在于SunCC的早期12.x天,并且出现在最新的SunCC 12.6中。当试图在x86系统上乘以多项式时,就会发生崩溃。下面的代码是GCM算法的一部分:

代码语言:javascript
运行
复制
$ cat test.cxx
# include <emmintrin.h>
# include <tmmintrin.h>
# include <wmmintrin.h>

__m128i GCM_Reduce_CLMUL(__m128i c0, __m128i c1, __m128i c2, const __m128i &r)
{
  __m128i t = r;
  c1 = _mm_xor_si128(c1, _mm_slli_si128(c0, 8));
  t = _mm_clmulepi64_si128(c0, r, 0x10);
  c1 = _mm_xor_si128(c1, t);
  c0 = _mm_srli_si128(c0, 8);
  c0 = _mm_xor_si128(c0, c1);
  c0 = _mm_slli_epi64(c0, 1);
  c0 = _mm_clmulepi64_si128(c0, r, 0x0);
  c2 = _mm_xor_si128(c2, c0);
  t = _mm_srli_si128(c1, 8);
  c2 = _mm_xor_si128(c2, t);
  c1 = _mm_unpacklo_epi64(c1, c2);
  c1 = _mm_srli_epi64(c1, 63);
  c2 = _mm_slli_epi64(c2, 1);
  return _mm_xor_si128(c2, c1);
}

和:

代码语言:javascript
运行
复制
$ /opt/developerstudio12.6/bin/CC -DNDEBUG -g3 -xO3 -m64 -KPIC -template=no%extdef -xarch=aes -c test.cxx
lf    25 PCLMULP_Xx      REG %x4    UND 0      REG %x4    REG %x0    UND 0      UND 0      UND 0      UND 0      UND 0      UND 0      off:0 uc:2 nxt: 29 bb:   3 FDI:F Ln:10 Ex:22

"test.cxx", [__1cQGCM_Reduce_CLMUL6FXXXrkX_X_]: assertion failed in function dump_asm_instruction() @ bfd_asm.c:2602
assert(nd_not_null_( disp.disp[0]) || (hf_dump_node(bfd_lf_node), 0))

CC: ube failed for test.cxx

我无法找到由于bfd_asm.c:2602而发生的坠机的信息。我相信这是在?的相同的崩溃,但它只是移动。

到目前为止,我们的策略是在等待修复时禁用代码路径。看起来它不会很快被修复,所以我们希望找到一个解决办法,并重新启用代码。

是什么引起了坠机,我该如何解决呢?

我认为这是MCVE,虽然它不是很有用:

代码语言:javascript
运行
复制
$ cat test.cxx
# include <emmintrin.h>
# include <tmmintrin.h>
# include <wmmintrin.h>

__m128i GCM_Reduce_CLMUL(__m128i c0, __m128i c1, __m128i c2, const __m128i &r)
{
  __m128i t = r;
  t = _mm_clmulepi64_si128(c0, t, 0x10);
  c0 = _mm_clmulepi64_si128(c0, t, 0x0);
  return _mm_xor_si128(c1, c0);
}

jwalton@solaris2:~/cryptopp$ /opt/developerstudio12.6/bin/CC -DNDEBUG -g3 -xO3 -m64 -KPIC -template=no%extdef -xarch=aes -c test.cxx
lf    17 PCLMULP_Xx      REG %x2    UND 0      REG %x2    REG %x0    UND 0      UND 0      UND 0      UND 0      UND 0      UND 0      off:0 uc:2 nxt: 21 bb:   3 FDI:F Ln:9 Ex:15

"test.cxx", [__1cQGCM_Reduce_CLMUL6FXXXrkX_X_]: assertion failed in function dump_asm_instruction() @ bfd_asm.c:2602
assert(nd_not_null_( disp.disp[0]) || (hf_dump_node(bfd_lf_node), 0))

CC: ube failed for test.cxx
EN

回答 1

Stack Overflow用户

发布于 2019-06-28 14:19:09

这是编译器中的一个bug。从内部表示转储中,我看到了PCLMUL指令的第二个输入操作数的错误类型。它必须是即时的,但在转储中是XMM。

可悲的是,这个问题不太可能得到解决。我能想到的唯一解决办法是使用-xarch=avx或更高版本,因为这将使用不同的指令表示,并且错误不会出现。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51353186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档