程序接收信号 SIGILL 非法指令
Posted
技术标签:
【中文标题】程序接收信号 SIGILL 非法指令【英文标题】:Program received signal SIGILL Illegal instruction 【发布时间】:2016-06-27 15:53:24 【问题描述】:我第一次在新机器上运行一个应用程序,但得到:
程序收到信号SIGILL,指令非法
当我这样做时
x/i $pc
我明白了:
=> 0x7fffe98b8f5b <_ZNSt10_HashtableImSt4pairIKmPN4ICE211t_orderInfoEESaIS5_ENSt8__detail10_Select1stESt8equal_toImESt4hashImENS7_18_Mod_range_hashingENS7_20_Default_ranged_hashENS7_20_Prime_rehash_policyENS7_17_Hashtable_traitsILb0ELb0ELb1EEEEC2Ev+
147>: vmovss 0x84b4d(%rip),%xmm0 # 0x7fffe993dab0
以为机器可能没有 AVX,但检查 proc/cpuinfo 显示 avx 和 avx2 架构都可用。
代码没有在这个盒子上编译,我以前没有用过这个盒子。我在静态和动态链接时遇到问题。
有人知道它可能是什么吗?它是机器上的 C++ 运行时库版本吗?
更新:似乎这是一条 AVX512 指令,这很奇怪。此代码是从 gcc 散列生成的。没有 AVX512 内联汇编。
【问题讨论】:
【参考方案1】:如果您单击Intel Intrinsics Guide 中的任何功能,则会说vmovss
需要AVX-512F。 AVX 和 AVX-2 还不够。
【讨论】:
好的,谢谢。这完全是奇怪的。我不知道为什么它会生成 AVX512 指令。 编译代码时使用了哪些选项?它们是否包含-mavx512f
或 -march=native
?编译代码的机器的 CPU 是否支持 AVX-512F?
嗨,只是想找到那个。我在自己的机器上本地构建了这个。它在一个远程盒子上运行,但在另一个远程盒子上给出了这个非法指令。动态和静态构建都会发生这种情况。我们几乎不使用avx2,更不用说avx512了。代码没有改变。我认为它与 gcc/os/kernel 版本有关。
构建代码的机器的 CPU 不支持 avx512以上是关于程序接收信号 SIGILL 非法指令的主要内容,如果未能解决你的问题,请参考以下文章
Debug系列SIGILL(Illegal instruction)问题定位