<div dir="ltr">Hi Alexander, Kostya,<div><br></div><div>I'm actually one of that flag's clients, but not for long.</div><div>It's actually handy when bringing up ASan in a new environment, but the shadow offset is one of the first things that will be fixed and the flexibility of having a flag might give people the idea that it's something that's easy to change by simply changing the flag.</div><div><br></div><div>It might also mess up performance. We're using a large-ish offset when testing (though not as large as 2^44) and we get an extra instruction + reg used because of that (mov shadow_offset, reg + or shadow_offset_reg, shadow_index_reg). It's not ideal, but we're still actively porting this.</div><div><br></div><div>Eventually, changing the shadow offset is not that hard. All it should take is change the appropriate version in the ASan pass and asan_mapping.h.</div><div><br></div><div>Since the flag is of very limited use (comes in handy when starting to port ASan, at most), I don't think it's a very big value to have it, either.</div><div><br></div><div>Alexander: Can you change your compiler so the ASan pass knows what offset you want to use for your use-case (by adding a triple to getShadowMapping() in AddressSanitizer.cpp, for example)?</div>







<div><br></div><div>Regards,</div><div><br></div><div>  Filipe</div><div><br></div><div><br></div></div><div class="gmail_extra"><br clear="all"><div>  F<br></div>
<br><div class="gmail_quote">On Thu, Sep 25, 2014 at 6:33 PM, Kostya Serebryany <span dir="ltr"><<a href="mailto:kcc@google.com" target="_blank">kcc@google.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"><br><div class="gmail_extra"><br><div class="gmail_quote"><span class="">On Thu, Sep 25, 2014 at 2:01 AM, Alexander Tarasikov <span dir="ltr"><<a href="mailto:alexander.tarasikov@gmail.com" target="_blank">alexander.tarasikov@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello, LLVM developers<br>
<br>
I would like to ask about the changes in the "nonpublic"<br>
AddressSanitizer flags in llvm 3.5.<br>
<br>
Prior to 3.5 (namely, on 3.4.2) there was a compile-time flag to<br>
control the shadow offset. For example, one could do the following to<br>
force the large offset:<br>
-mllvm -asan-mapping-offset-log=44<br>
<br>
Now, it has been removed and on x86_64 linux the smaller offset is always used.<br>
<br>
Our use case for the large offset was using NVIDIA OpenGL/CUDA drivers<br>
which apparently mmap certain memory ranges and fail when the<br>
requested address does not match the return value of mmap. Using a<br>
larger offset allows to work around the problem and use both the<br>
binary driver and ASan which is very useful.<br>
<br>
Could someone explain the reason behind forcing a small shadow offset<br>
on 64-bit linux</blockquote><div><br></div></span><div>The reason is performance and code size -- both get better by 3%-5% with the small offset. </div><span class=""><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"> and add a public documented option to control it?</blockquote><div><br></div></span><div>Oh my... This is not as trivial as it sounds. </div><div>We removed this option because (as we thought) no one was using it and because it was actually hard to maintain. </div><div>This is a compile-time option, which uses a different ABI, and objects built with different flags are incompatible. </div><div>GCC variant of asan does not support it either and GCC folks explicitly said that they are not going to. </div><div><br></div><div>I don't have a good solution. Others? </div><div>In the meantime I would strongly suggest to try fixing the issue on the NVIDIA side. </div><span class=""><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"> It<br>
is also interesting that OS X and FreeBSD use larger offset.<br></blockquote><div><br></div><div><br></div></span><div>Right. The small offset didn't work there for some reasons... </div><span class=""><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Meanwhile, those who are interested in using ASan and NVIDIA, can edit<br>
"lib/Transforms/Instrumentation/AddressSanitizer.cpp" and replace<br>
"Mapping.Offset = kSmallX86_64ShadowOffset" with "Mapping.Offset =<br>
kDefaultShadowOffset64".<br></blockquote></span><div>you will also need to change the run-time library. </div><div><br></div><div>--kcc  </div><span class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<span><font color="#888888"><br>
--<br>
Regards, Alexander<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" 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>
</font></span></blockquote></span></div><br></div></div>
<br>_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu">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>
<br></blockquote></div><br></div>