<div dir="ltr">Hello,<div><br></div><div>I tried that as well but there are no tsan warnings thrown at run time, even though there are data race error!</div><div><br></div><div>The steps I followed:</div><div>1. Generate bitcode using 'clang -emit-llvm' command</div><div>2. Using the 'opt -load ..' command, I instrumented the bitcode file with my custom pass</div><div>3. Using the command 'opt -tsan ..', instrumented the output bitcode file from step 2</div><div>4. Using the llvm backend compiler, 'llc', compiled the program to native assembly</div><div>5. The output from step 4 is compiled again with 'clang -fsanitize=thread' (linking tsan here) for the final object file.</div><div><br></div><div>Executing this final output file works fine, except that it doesn't throws any TSAN warnings!</div><div><br></div><div><br></div><div>In between, lli command is used to invoke the LLVM Interpreter.</div><div><br></div><div><br></div><div><br></div><div><br><br>On Wednesday, June 28, 2017 at 2:12:11 PM UTC+2, Dmitry Vyukov wrote:<blockquote class="gmail_quote" style="margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;">On Tue, Jun 27, 2017 at 6:00 PM, Dmitry Vyukov <<a href="javascript:" target="_blank" gdf-obfuscated-mailto="07EyQb-CAAAJ" rel="nofollow" onmousedown="this.href='javascript:';return true;" onclick="this.href='javascript:';return true;">dvy...@google.com</a>> wrote:
<br>> On Tue, Jun 27, 2017 at 4:18 PM, Nischai Vinesh
<br>> <<a href="javascript:" target="_blank" gdf-obfuscated-mailto="07EyQb-CAAAJ" rel="nofollow" onmousedown="this.href='javascript:';return true;" onclick="this.href='javascript:';return true;">nischai...@gmail.com</a>> wrote:
<br>>> Hello,
<br>>>
<br>>> I have written a custom pass to do some tasks and I want to run this pass on
<br>>> a source code file along with TSAN instrumentation.
<br>>>
<br>>> Steps I followed:
<br>>> 1. I compiled the code file with -fsanitize=thread and -emit-llvm to get the
<br>>> byte code of the file
<br>>> 2.  Used opt to run my custom pass on the TSAN instrumented .bc file
<br>>> 3. Run the final .bc file using lli with proper inputs
<br>>>
<br>>> This gives me a "LLVM ERROR: Program used external function '__tsan_init'
<br>>> which could not be resolved!"
<br>
<br>
<br>Hi,
<br>
<br>I don't know what is lli, but from the error message it seems that the
<br>problem is that you don't link in tsan runtime (tsan runtime provides
<br>__tsan_init function).
<br>I think you need to compile you instrumented file into object file
<br>first (.o), and then link it with clang -fsanitize=thread (which will
<br>link in runtime).
<br>
<br>
<br>
<br>>> I tried to instrument TSAN on a later step, as follows:
<br>>> 1. Used -emit-llvm to get the .bc file
<br>>> 2. Used opt to run my custom pass on the .bc file
<br>>> 3. Used llc to compile the program to native assembly
<br>>> 4. Used gcc/clang along with -fsanitize=thread to assemble it into a program
<br>>>
<br>>> This does not throws any tsan warnings!  (There are some data race errors
<br>>> intentionally coded in the program to test this)
<br>>>
<br>>> Is there any ways to do this, instrumenting the source code with tsan and
<br>>> use a custom pass to do some other tasks on the same binary?
<br>>>
<br>>>
<br>>> Thank you
<br>>
<br>> +llvm-dev mailing list
<br></blockquote></div></div>