[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 13:14:48 PDT 2016


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