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

Nischai Vinesh via llvm-dev llvm-dev at lists.llvm.org
Thu Jul 13 08:29:51 PDT 2017


OK. So if I am not wrong, I need to do a cmake on the llvm build directory, 
with the mentioned flags and then do make - which will basically build the 
whole llvm repo. 



On Tuesday, July 11, 2017 at 4:00:26 PM UTC+2, Dmitry Vyukov wrote:
>
> On Tue, Jul 11, 2017 at 3:26 PM, Nischai Vinesh 
> <nischai... at gmail.com <javascript:>> wrote: 
> > Hi Dmitry, 
> > 
> > I managed to get the program instrumented with tsan using 'opt -tsan 
> ..', 
> > but still it is not printing tsan warnings when I run the binary. When I 
> > instrument the same program with tsan during compilation using 'clang 
> > -fsanitize=thread ...', without instrumenting my IR pass, it does give 
> out 
> > tsan warnings! 
> > 
> > 
> > On Monday, July 10, 2017 at 7:21:28 AM UTC+2, Dmitry Vyukov wrote: 
> >> 
> >> On Sun, Jul 9, 2017 at 3:50 PM, Nischai Vinesh <nischai... at gmail.com> 
> >> wrote: 
> >> > 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! 
> >> 
> >> 
> >> Hi Nischai, 
> >> 
> >> I see 3 possibilities: 
> >> 1. Either the code is somehow ends up being non-instrumented, or 
> >> 2. tsan does not consider what it sees a data race, or 
> >> 3. the data race is masked by unrelated synchronization. 
> >> 
> >> For 1 you can check that the resulting code in fact contains __tsan_* 
> >> callbacks. 
> >> For 2 and 3 you can rebuilt tsan runtime with TSAN_DEBUG_OUTPUT=2 
> >> define, then it will print everything it sees (memory accesses and 
> >> synchronization). This output will allow us to figure out why it does 
> >> not report a race. 
> > 
> > 
> > So I guess we can rule out the 1st possibility. Can you kindly tell me 
> how 
> > to rebuild tsan runtime? Sorry, I am new to LLVM and stuff. 
>
> Here is the script we use on build bots: 
>
> https://github.com/llvm-mirror/zorg/blob/master/zorg/buildbot/builders/sanitizers/buildbot_standard.sh 
>
> You need this option with -DCOMPILER_RT_DEBUG=ON 
> -DCOMPILER_RT_TSAN_DEBUG_OUTPUT=ON: 
>
> echo @@@BUILD_STEP build tsan with stats and debug output@@@ 
> build_tsan "${TSAN_FULL_DEBUG_BUILD_DIR}" "-DCOMPILER_RT_DEBUG=ON 
> -DCOMPILER_RT_TSAN_DEBUG_OUTPUT=ON -DLLVM_INCLUDE_TESTS=OFF" gcc g++ 
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170713/53b87efc/attachment.html>


More information about the llvm-dev mailing list