<div dir="ltr"><br><div class="gmail_extra"><div class="gmail_quote">On Mon, Sep 30, 2013 at 7:48 PM, John Criswell <span dir="ltr"><<a href="mailto:criswell@illinois.edu" target="_blank">criswell@illinois.edu</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div bgcolor="#FFFFFF" text="#000000"><div><div class="h5">
<div>On 9/30/13 9:40 AM, Alexey Samsonov
wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">Hi llvmdev!
<div><br>
</div>
<div>There are cases when we want our instrumentation passes for
Sanitizer tools to insert llvm.memset.* calls (basically, we
want to mark certain region of user memory as (un)addressable
by writing magic values for "shadow" of that memory region).
llvm.memset are convenient:</div>
<div>(1) we don't have to manually emit all these n-byte stores
in a cycle.</div>
<div>(2) llvm.memset can be inlined as a platform-specific fast
instructions (e.g. SSE).</div>
<div>But there will be a problem if llvm.memset is lowered into
a regular memset() call: sanitizer runtime libraries intercept
all memset() calls and treat them as function calls made by
user, in particular checking that its arguments point to an
addressable "user" memory, not some sanitizer-specific memory
regions.</div>
<div><br>
</div>
<div>Can you suggest a way to ensure llvm.memset() is not
transformed into memset function()? This intrinsic has
<isvolatile> argument, which limits possible
optimization of this call, does it make sense to add yet
another argument, that would forbid transforming it into
function calls?</div>
</div>
</blockquote>
<br></div></div>
Dumb question: why not run the ASan instrumentation passes first and
then run the pass that inserts the calls to llvm.memset()?<br>
<br>
Alternatively, why not put the llvm.memset and load/store
instrumentation into a single pass? That way, the pass can
determine which memsets it added itself and which are ones from the
original program that need instrumentation.<br></div></blockquote><div><br></div><div>Sorry, I didn't understand your suggestions. Maybe I poorly described the problem. We need a way to teach CodeGen that some llvm.memset intrinsics can't be lowered into memset function call (those, that were added by ASan instrumentation pass), and some can (all the others). Otherwise the program would crash on ASan-added memset() at runtime.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div bgcolor="#FFFFFF" text="#000000">
<br>
-- John T.<span class="HOEnZb"><font color="#888888"><br>
<br>
<blockquote type="cite">
<div dir="ltr">
<div>
<div><br>
</div>
-- <br>
<div>Alexey Samsonov, MSK</div>
</div>
</div>
<br>
<fieldset></fieldset>
<br>
<pre>_______________________________________________
LLVM Developers mailing list
<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>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a>
</pre>
</blockquote>
<br>
</font></span></div>
</blockquote></div><br><br clear="all"><div><br></div>-- <br><div>Alexey Samsonov, MSK</div>
</div></div>