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

Hans Wennborg via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 26 14:30:46 PDT 2016


Merged in r276810.

Thanks,
Hans

On Tue, Jul 26, 2016 at 2:26 PM, Kostya Serebryany <kcc at google.com> wrote:
> 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
>> >
>
>


More information about the llvm-commits mailing list