0

I'm running an application on a new machine for the first time but getting:

Program received signal SIGILL, Illegal instruction

and when I do

x/i $pc

I get:

=> 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

Thought the machine might not have AVX, but checking proc/cpuinfo shows both avx and avx2 architectures available.

The code wasn't compiled on this box and I haven't used this box before. I get the problem when I link statically and dynamically.

Anybody got any tips what it could be? Is it the C++ runtime library version on the machine?

UPDATE: seems this is an AVX512 instruction, which is totally weird. This code is being generated from gcc hashing. There is no AVX512 inline assembly.

intrigued_66
  • 16,082
  • 51
  • 118
  • 189

1 Answers1

0

If you click on any function in Intel Intrinsics Guide then it would say that vmovss requires AVX-512F. AVX and AVX-2 are not enough.

gudok
  • 4,029
  • 2
  • 20
  • 30
  • Okay thanks for this. This is totally bizarre. I have no idea why its generating AVX512 instructons. – intrigued_66 Jun 27 '16 at 16:14
  • What options were used to compile code? Do they contain `-mavx512f` or `-march=native` ? Is AVX-512F supported by CPU of machine where code was compiled? – gudok Jun 27 '16 at 16:19
  • 1
    Hi, just trying to find that. I built this locally on my own machine. It runs on one remote box, but gives this illegal instruction on a different remote box. This happens for both dynamic and static builds. We hardly use avx2, let alone avx512. The code has not been changed. Its something to do with gcc/os/kernel version I think. – intrigued_66 Jun 27 '16 at 16:28
  • 1
    avx512 is not supported on the CPU of the machine which built the code – intrigued_66 Jun 27 '16 at 16:42