I get "Program received signal SIGILL, Illegal instruction." with Boost Threads, Mingw 64 (gcc 4.5) on Windows 7 SP1.
The problem is reproduce able with a program, that does nothing more than spawn a boost thread and join it.
CPU is a Intel Core i7-2600, 4x 3.40GHz which has "Sandy Bridge" architecture and therefore new instructions? Could this have to do something with the error?
The same setup/program works on Intel Core2 and Intel Core i7 (non Sandy Bridge).
So is this MinGW or Boost bug? Or my own fault somehow?
Thanks for any suggestions!
I assume it is related to i7-2600 CPU's instruction set. As far as I remember uses this CPU AVX and doesn't provide SSE5. So maybe there are instructions used, which aren't supported for this CPU.
Could you possibly provide a debugger backtrace and provide the instruction producing this issue?
Dump of assembler code for function _ZN5boost12_GLOBALN_121thread_start_functionEPv:
0x000000006b503ae0 <+0>: lea 0xd909(%rip),%rax # 0x6b5113f0 <gxx_personality_sj0>
0x000000006b503ae7 <+7>: lea 0x1473a(%rip),%rdx # 0x6b518228 <_DTOR_LIST+720>
0x000000006b503aee <+14>: sub $0x198,%rsp
0x000000006b503af5 <+21>: mov %rcx,0x1a0(%rsp)
0x000000006b503afd <+29>: lea 0x30(%rsp),%rcx
0x000000006b503b02 <+34>: mov %rbx,0x158(%rsp)
0x000000006b503b0a <+42>: mov %rax,0x60(%rsp)
0x000000006b503b0f <+47>: mov %rdx,0x68(%rsp)
0x000000006b503b14 <+52>: lea 0xb0(%rsp),%rax
0x000000006b503b1c <+60>: lea 0x1d2(%rip),%rdx # 0x6b503cf5 <_ZN5boost12_GLOBAL__N_121thread_start_functionEPv+533>
0x000000006b503b23 <+67>: mov %rsi,0x160(%rsp)
0x000000006b503b2b <+75>: mov %rdi,0x168(%rsp)
0x000000006b503b33 <+83>: mov %rax,0x70(%rsp)
0x000000006b503b38 <+88>: mov %rbp,0x170(%rsp)
0x000000006b503b40 <+96>: mov %rdx,0x78(%rsp)
0x000000006b503b45 <+101>: mov %r12,0x178(%rsp)
0x000000006b503b4d <+109>: mov %r13,0x180(%rsp)
0x000000006b503b55 <+117>: mov %r14,0x188(%rsp)
0x000000006b503b5d <+125>: mov %r15,0x190(%rsp)
0x000000006b503b65 <+133>: mov %rsp,0x80(%rsp)
=> 0x000000006b503b6d <+141>: vmovdqa %xmm6,0xb0(%rsp)
0x000000006b503b76 <+150>: vmovdqa %xmm7,0xc0(%rsp)
0x000000006b503b7f <+159>: vmovdqa %xmm8,0xd0(%rsp)
0x000000006b503b88 <+168>: vmovdqa %xmm9,0xe0(%rsp)
0x000000006b503b91 <+177>: vmovdqa %xmm10,0xf0(%rsp)
0x000000006b503b9a <+186>: vmovdqa %xmm11,0x100(%rsp)
0x000000006b503ba3 <+195>: vmovdqa %xmm12,0x110(%rsp)
0x000000006b503bac <+204>: vmovdqa %xmm13,0x120(%rsp)
0x000000006b503bb5 <+213>: vmovdqa %xmm14,0x130(%rsp)
0x000000006b503bbe <+222>: vmovdqa %xmm15,0x140(%rsp)
0x000000006b503bc7 <+231>: callq 0x6b512630 <_Unwind_SjLj_Register>
Looks like you were right as this is an AVX instruction right?
I compiled with -march=generic -mtune=generic and also tried core2 but no luck.
Could it help if I compile everything (Boost and my program) with corei7-avx ?
Although I could not resolve this issue, the good news is that if I compile everything on a machine with a different cpu it runs on the i7-2600 without problems.
Log in to post a comment.