<div dir="rtl"><div dir="ltr">With an old version of LLVM, this discussion and related patch may be relevant.</div><div dir="ltr"><br></div><div dir="ltr"><a href="http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20131021/192392.html">http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20131021/192392.html</a><br></div><div dir="ltr"><br></div></div><div class="gmail_extra"><br><div class="gmail_quote"><div dir="ltr">2015-06-30 14:39 GMT+03:00 Ephrim Khong <span dir="ltr"><<a href="mailto:dr.khong@gmail.com" target="_blank">dr.khong@gmail.com</a>></span>:</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Thanks, chkstk was a very good pointer of what might go wrong!  I assume LLVM optimizes the chain of alloca/store to a single alloca & memset. With stack growing down, memset working upwards, memset would touch a byte after the guarding page.  Note sure if that assumption is correct, but it would explain what we see.<br>
<br>
Not sure yet if chkstk is emitted, will try to find out.<br>
<br>
Thanks,<br>
Eph<div class="HOEnZb"><div class="h5"><br>
<br>
On 30.06.2015 12:17, Anton Korobeynikov wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Make sure the stack probes are emitted (__alloca / chkstk) and that<br>
they indeed do probe the memory.<br>
<br>
On Tue, Jun 30, 2015 at 12:21 PM, Ephrim Khong <<a href="mailto:dr.khong@gmail.com" target="_blank">dr.khong@gmail.com</a>> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi All,<br>
<br>
we have an issue with our LLVM-based JIT compiler - executing the compiled<br>
code corrupts memory (and subsequently crashes) if we alloca more than 4k of<br>
variables (more than 511 8-byte ints). The same code works on Windows 7 (32<br>
and 64 bit), Linux, MacOS. We compile LLVM and our program with Microsoft's<br>
Visual Studio 2010. Both debug and release builds are affected.<br>
<br>
The variables are created en-block at the beginning of the function with<br>
code looking like<br>
<br>
for (i=0; i<513; ++i) {<br>
   AllocaInst *variable =<br>
        mBuilder.CreateAlloca(Type::getInt64Ty(mContext),0,"");<br>
   mBuilder.CreateStore(GetConstI("INT4_8",0),variable);<br>
}<br>
<br>
We have not yet looked at the compiled machine code (same on Win 7 and 8, or<br>
differs?). But the 4k limit made us suspicious, as there were some bug<br>
reports - some still open - regarding this limit with LLVM [1,2].<br>
<br>
So the question is - before digging into this for more days - is there some<br>
known issue with this, or does anyone have an idea what might go wrong?<br>
<br>
Thanks,<br>
Eph<br>
<br>
[1] <a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__llvm.org_bugs_show-5Fbug.cgi-3Fid-3D2921&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=Mfk2qtn1LTDThVkh6-oGglNfMADXfJdty4_bhmuhMHA&m=E1M1mFWfZurhDHIaSSFXXMCMFDYEiBApxZ-2Db0zrdE&s=U-BZ8wgRHNAgDTH0VbJieGy_zFDYS9ThzOz3T2eIAhE&e=" rel="noreferrer" target="_blank">https://llvm.org/bugs/show_bug.cgi?id=2921</a><br>
[2] <a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__llvm.org_bugs_show-5Fbug.cgi-3Fid-3D8919&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=Mfk2qtn1LTDThVkh6-oGglNfMADXfJdty4_bhmuhMHA&m=E1M1mFWfZurhDHIaSSFXXMCMFDYEiBApxZ-2Db0zrdE&s=IqdbTkUPpZjD5qO4E19hFmwgsffrF4XqpZFEudCvLgI&e=" rel="noreferrer" target="_blank">https://llvm.org/bugs/show_bug.cgi?id=8919</a><br>
<br>
_______________________________________________<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" rel="noreferrer" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" rel="noreferrer" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
</blockquote>
<br>
<br>
<br>
</blockquote>
<br>
_______________________________________________<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" rel="noreferrer" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" rel="noreferrer" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
</div></div></blockquote></div><br></div>