<div dir="ltr">I suspect that there are 2 issues here:<div><br></div><div> * I have incorrect alignment somewhere</div><div> * MSVC / .pdb / CodeView debugging is not working correctly.</div><div><br></div><div>I think the latter would help solve the former.</div><div><br></div><div>I will send out a new email later talking about the issues I'm having debugging llvm-generated binaries with MSVC.</div><div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Sep 30, 2017 at 3:33 PM, Andrew Kelley <span dir="ltr"><<a href="mailto:superjoe30@gmail.com" target="_blank">superjoe30@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>I have this code, which works fine on MacOS and Linux hosts:<br></div><div><br></div><div><div>    const char *target_specific_cpu_args;</div><div>    const char *target_specific_features;</div><div>    if (g->is_native_target) {</div><div>        target_specific_cpu_args = ZigLLVMGetHostCPUName();</div><div>        target_specific_features = ZigLLVMGetNativeFeatures();</div><div>    } else {</div><div>        target_specific_cpu_args = "";</div><div>        target_specific_features = "";</div><div>    }</div></div><div><br></div><div><div>    g->target_machine = LLVMCreateTargetMachine(<wbr>target_ref, buf_ptr(&g->triple_str),</div><div>            target_specific_cpu_args, target_specific_features, opt_level, reloc_mode, LLVMCodeModelDefault);</div></div><div><br></div><div><br></div><div><br></div><div>char *ZigLLVMGetHostCPUName(void) {</div><div>    std::string str = sys::getHostCPUName();</div><div>    return strdup(str.c_str());</div><div>}</div><div><br></div><div>char *ZigLLVMGetNativeFeatures(<wbr>void) {</div><div>    SubtargetFeatures features;</div><div><br></div><div>    StringMap<bool> host_features;</div><div>    if (sys::getHostCPUFeatures(host_<wbr>features)) {</div><div>        for (auto &F : host_features)</div><div>            features.AddFeature(F.first(), F.second);</div><div>    }</div><div><br></div><div>    return strdup(features.getString().c_<wbr>str());</div><div>}</div><div><br></div><div>On this windows laptop that I am testing on, I get these values:</div><div><br></div><div>target_specific_cpu_args: skylake<br></div><div><br></div><div>target_specific_features: +sse2,+cx16,-tbm,-avx512ifma,-<wbr>avx512dq,-fma4,+prfchw,+bmi2,+<wbr>xsavec,+fsgsbase,+popcnt,+aes,<wbr>+xsaves,-avx512er,-<wbr>avx512vpopcntdq,-clwb,-<wbr>avx512f,-clzero,-pku,+mmx,-<wbr>lwp,-xop,+rdseed,-sse4a,-<wbr>avx512bw,+clflushopt,+xsave,-<wbr>avx512vl,-avx512cd,+avx,-rtm,+<wbr>fma,+bmi,+rdrnd,-mwaitx,+sse4.<wbr>1,+sse4.2,+avx2,+sse,+lzcnt,+<wbr>pclmul,-prefetchwt1,+f16c,+<wbr>ssse3,+sgx,+cmov,-avx512vbmi,+<wbr>movbe,+xsaveopt,-sha,+adx,-<wbr>avx512pf,+sse3<br></div><div><br></div><div><br></div><div>It successfully creates a binary, but the binary when run crashes with:</div><div><br></div><div>Unhandled exception at 0x00007FF7C9913BA7 in test.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.</div><div><br></div><div>The disassembly of the crashed instruction is:</div><div><br></div><div><div>00007FF7C9913BA7  vmovdqa     xmmword ptr [rbp-20h],xmm0  </div></div><div><br></div><div>There is no callstack or source in the MSVC debugger. The .pdb produced is 64KB exactly. The file was linked with:</div><div><br></div><div>lld -NOLOGO -DEBUG -MACHINE:X64 /SUBSYSTEM:console -OUT:.\test.exe -NODEFAULTLIB -ENTRY:_start ./zig-cache/test.obj ./zig-cache/builtin.obj ./zig-cache/compiler_rt.obj ./zig-cache/kernel32.lib<br></div><div><br></div><div><br></div><div>When I change the call to LLVMCreateTargetMachine so that both target_specific_cpu_args  and target_specific_features  are the empty string, the produced binary is valid and runs successfully.</div><div><br></div><div>Is this an LLVM bug? Am I using the API incorrectly? Is there more information I can provide to LLVM-dev mailing list that would make it easier to help me?</div></div>
</blockquote></div><br></div></div></div>