<div dir="ltr">Hi there,<br><br><div>I had similar problem around LLVM 3.5 and I'm almost certain that is only Windows 64-bit related. In my case longjmp was crashing from time to time and moreover debugger trap was triggered inside longjmp every time (it could be ignored). I haven't found a proper solution and switched from library longjmp to builtin one (llvm.eh.sjlj.longjmp). Moving longjmp call from C++ managed by MSVC to LLVM IR can also be helpful.</div><div><br></div><div>My guess is that longjmp does not work on Windows 64bit because it needs correct stack unwinding information and LLVM does not deliver it. Back then in 3.5 days exception handling on Windows was quite poor.</div><div><br></div><div>- Paweł</div></div><br><div class="gmail_quote">On Mon, Apr 27, 2015 at 8:08 PM Reid Kleckner <<a href="mailto:rnk@google.com">rnk@google.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Are you using split stacks of some kind? Are you sure these actually work as intended on Win64? Based on the source code, it looks like you are allocating stack manually, but I could be wrong.<div><br></div><div>What triple are you using with LLVM to generate code?</div><div><br></div><div>There isn't much else information here, but you can try to zero in on the problem by checking the stack alignment manually with a helper like:</div><div><div>void CheckAlignment() {</div><div>  assert((((uintptr_t)_AddressOfReturnAddress() + 8) & 15) == 0);</div><div>}</div></div><div><br></div><div>Run this near where LLVM calls back into C code. If it fails, disassemble the calling LLVM function and look at that to see if there's something wrong with the prologue. Sending that along with any followups would be helpful.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Apr 25, 2015 at 3:07 PM, Dibyendu Majumdar <span dir="ltr"><<a href="mailto:mobile@majumdar.org.uk" target="_blank">mobile@majumdar.org.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I have an example test program (smallest I could construct) that<br>
triggers the problem. The relevant line is commented in the code.<br>
<br>
<a href="https://github.com/dibyendumajumdar/ravi/tree/master/ravi-tests/longjmp_issue" target="_blank">https://github.com/dibyendumajumdar/ravi/tree/master/ravi-tests/longjmp_issue</a><br>
<br>
I have also dumped the IR for the three functions that are compiled.<br>
<br>
The C code that does the longjmp and setjmp is at:<br>
<br>
<a href="https://github.com/dibyendumajumdar/ravi/blob/master/src/ldo.c" target="_blank">https://github.com/dibyendumajumdar/ravi/blob/master/src/ldo.c</a><br>
<br>
See functions luaD_throw() and luaD_rawrunprotected()<br>
<div><div>_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu" target="_blank">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
</div></div></blockquote></div><br></div>
_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu" target="_blank">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
</blockquote></div>