<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>