[llvm] r276015 - [tsan] Don't instrument __llvm_gcov_global_state_pred or __llvm_gcda*

Kostya Serebryany via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 26 14:26:53 PDT 2016


no objections

On Tue, Jul 26, 2016 at 1:14 PM, Hans Wennborg <hans at chromium.org> wrote:

> I assume you mean 3.9 :-)
>
> sgtm if Kostya doesn't object.
>
> Cheers,
> Hans
>
> On Tue, Jul 26, 2016 at 1:09 PM, Vedant Kumar <vsk at apple.com> wrote:
> > Hi Hans,
> >
> > Could we take this fix for llvm 4.0?
> >
> > It makes it possible to use GCov instrumentation along with TSan. Anna
> reviewed this patch for me internally and we're shipping it with swift 3.
> >
> > best,
> > vedant
> >
> >> On Jul 19, 2016, at 1:16 PM, Vedant Kumar via llvm-commits <
> llvm-commits at lists.llvm.org> wrote:
> >>
> >> Author: vedantk
> >> Date: Tue Jul 19 15:16:08 2016
> >> New Revision: 276015
> >>
> >> URL: http://llvm.org/viewvc/llvm-project?rev=276015&view=rev
> >> Log:
> >> [tsan] Don't instrument __llvm_gcov_global_state_pred or __llvm_gcda*
> >>
> >> r274801 did not go far enough to allow gcov+tsan to cooperate. With this
> >> commit it's possible to run the following code without false positives:
> >>
> >>  std::thread T1(fib), T2(fib);
> >>  T1.join(); T2.join();
> >>
> >> Modified:
> >>    llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp
> >>
> llvm/trunk/test/Instrumentation/ThreadSanitizer/do-not-instrument-memory-access.ll
> >>
> >> Modified: llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp
> >> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp?rev=276015&r1=276014&r2=276015&view=diff
> >>
> ==============================================================================
> >> --- llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp
> (original)
> >> +++ llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp Tue
> Jul 19 15:16:08 2016
> >> @@ -272,8 +272,9 @@ static bool shouldInstrumentReadWriteFro
> >>         return false;
> >>     }
> >>
> >> -    // Check if the global is in a GCOV counter array.
> >> -    if (GV->getName().startswith("__llvm_gcov_ctr"))
> >> +    // Check if the global is private gcov data.
> >> +    if (GV->getName().startswith("__llvm_gcov") ||
> >> +        GV->getName().startswith("__llvm_gcda"))
> >>       return false;
> >>   }
> >>
> >>
> >> Modified:
> llvm/trunk/test/Instrumentation/ThreadSanitizer/do-not-instrument-memory-access.ll
> >> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/ThreadSanitizer/do-not-instrument-memory-access.ll?rev=276015&r1=276014&r2=276015&view=diff
> >>
> ==============================================================================
> >> ---
> llvm/trunk/test/Instrumentation/ThreadSanitizer/do-not-instrument-memory-access.ll
> (original)
> >> +++
> llvm/trunk/test/Instrumentation/ThreadSanitizer/do-not-instrument-memory-access.ll
> Tue Jul 19 15:16:08 2016
> >> @@ -13,6 +13,8 @@ target triple = "x86_64-apple-macosx10.9
> >>
> >> @__llvm_gcov_ctr = internal global [1 x i64] zeroinitializer
> >> @__llvm_gcov_ctr.1 = internal global [1 x i64] zeroinitializer
> >> + at __llvm_gcov_global_state_pred = internal global i32 0
> >> + at __llvm_gcda_foo = internal global i32 0
> >>
> >> define i32 @test_gep() sanitize_thread {
> >> entry:
> >> @@ -42,5 +44,16 @@ entry:
> >>   ret i32 undef
> >> }
> >>
> >> +define void @test_load() sanitize_thread {
> >> +entry:
> >> +  %0 = load i32, i32* @__llvm_gcov_global_state_pred
> >> +  store i32 1, i32* @__llvm_gcov_global_state_pred
> >> +
> >> +  %1 = load i32, i32* @__llvm_gcda_foo
> >> +  store i32 1, i32* @__llvm_gcda_foo
> >> +
> >> +  ret void
> >> +}
> >> +
> >> ; CHECK-NOT: {{call void @__tsan_write}}
> >> ; CHECK: __tsan_init
> >>
> >>
> >> _______________________________________________
> >> llvm-commits mailing list
> >> llvm-commits at lists.llvm.org
> >> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160726/e16ad818/attachment.html>


More information about the llvm-commits mailing list