[llvm-dev] Using TSAN along with custom llvm IR pass

Nischai Vinesh via llvm-dev
2017-07-09T13:50:55Z

Hello,

I tried that as well but there are no tsan warnings thrown at run time,
even though there are data race error!

The steps I followed:
1. Generate bitcode using 'clang -emit-llvm' command
2. Using the 'opt -load ..' command, I instrumented the bitcode file
with
my custom pass
3. Using the command 'opt -tsan ..', instrumented the output bitcode
file
from step 2
4. Using the llvm backend compiler, 'llc', compiled the program to
native
assembly
5. The output from step 4 is compiled again with 'clang
-fsanitize=thread'
(linking tsan here) for the final object file.

Executing this final output file works fine, except that it doesn't throws
any TSAN warnings!


In between, lli command is used to invoke the LLVM Interpreter.





On Wednesday, June 28, 2017 at 2:12:11 PM UTC+2, Dmitry Vyukov
wrote:
>
> On Tue, Jun 27, 2017 at 6:00 PM, Dmitry Vyukov <dvy... at google.com
> <javascript:>> wrote:
> > On Tue, Jun 27, 2017 at 4:18 PM, Nischai Vinesh
> > <nischai... at gmail.com <javascript:>> wrote:
> >> Hello,
> >>
> >> I have written a custom pass to do some tasks and I want to run
this
> pass on
> >> a source code file along with TSAN instrumentation.
> >>
> >> Steps I followed:
> >> 1. I compiled the code file with -fsanitize=thread and -emit-llvm
to
> get the
> >> byte code of the file
> >> 2.  Used opt to run my custom pass on the TSAN instrumented .bc
file
> >> 3. Run the final .bc file using lli with proper inputs
> >>
> >> This gives me a "LLVM ERROR: Program used external function
> '__tsan_init'
> >> which could not be resolved!"
>
>
> Hi,
>
> I don't know what is lli, but from the error message it seems that the
> problem is that you don't link in tsan runtime (tsan runtime provides
> __tsan_init function).
> I think you need to compile you instrumented file into object file
> first (.o), and then link it with clang -fsanitize=thread (which will
> link in runtime).
>
>
>
> >> I tried to instrument TSAN on a later step, as follows:
> >> 1. Used -emit-llvm to get the .bc file
> >> 2. Used opt to run my custom pass on the .bc file
> >> 3. Used llc to compile the program to native assembly
> >> 4. Used gcc/clang along with -fsanitize=thread to assemble it into
a
> program
> >>
> >> This does not throws any tsan warnings!  (There are some data race
> errors
> >> intentionally coded in the program to test this)
> >>
> >> Is there any ways to do this, instrumenting the source code with
tsan
> and
> >> use a custom pass to do some other tasks on the same binary?
> >>
> >>
> >> Thank you
> >
> > +llvm-dev mailing list
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20170709/a08b8217/attachment.html>