On Wed, Mar 7, 2018 at 3:49 PM, Thomas Munro <thomas.mu...@enterprisedb.com> wrote: > make check at today's HEAD of your jit branch crashes on my FreeBSD > box. The first thing to crash is this query from point.sql: > > LOG: server process (PID 87060) was terminated by signal 4: Illegal > instruction > DETAIL: Failed process was running: SELECT '' AS thirtysix, p1.f1 AS > point1, p2.f1 AS point2, p1.f1 <-> p2.f1 AS dist > FROM POINT_TBL p1, POINT_TBL p2 > ORDER BY dist, p1.f1[0], p2.f1[0];
Hmm. It's trying to execute an AVX instruction. * thread #1, stop reason = breakpoint 1.1 frame #0: llvmjit.so`ExecRunCompiledExpr(state=0x0000000801de4880, econtext=0x0000000801de3560, isNull="") at llvmjit_expr.c:432 429 430 state->evalfunc = func; 431 -> 432 return func(state, econtext, isNull); 433 } 434 435 static void emit_lifetime_end(ExprState *state, LLVMModuleRef mod, LLVMBuilderRef b); (lldb) s Process 44513 stopped * thread #1, stop reason = signal SIGILL: privileged instruction frame #0: 0x0000000801157193 -> 0x801157193: vmovsd (%rax), %xmm0 ; xmm0 = mem[0],zero 0x801157197: vmovsd 0x8(%rax), %xmm1 ; xmm1 = mem[0],zero 0x80115719c: vsubsd (%rcx), %xmm0, %xmm2 0x8011571a0: vsubsd 0x8(%rcx), %xmm1, %xmm0 (lldb) bt * thread #1, stop reason = signal SIGILL: privileged instruction * frame #0: 0x0000000801157193 This is running on a "Intel(R) Celeron(R) CPU G1610T @ 2.30GHz" with no AVX. I am not sure if that is real though, because the stack is immediately corrupted. So either func is not really a function, or it is but was compiled for the wrong target. I see that you call LLVMCreateTargetMachine() with the result of LLVMGetHostCPUName() as cpu. For me that's "ivybridge", so I tried hard coding "generic" instead and it didn't help. I see that you say "" for features, where is where one would normally put "avx" to turn on AVX instructions, so I think perhaps that theory is entirely bogus. -- Thomas Munro http://www.enterprisedb.com