[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