<div dir="ltr">no objections </div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jul 26, 2016 at 1:14 PM, Hans Wennborg <span dir="ltr"><<a href="mailto:hans@chromium.org" target="_blank">hans@chromium.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I assume you mean 3.9 :-)<br>
<br>
sgtm if Kostya doesn't object.<br>
<br>
Cheers,<br>
Hans<br>
<div class="HOEnZb"><div class="h5"><br>
On Tue, Jul 26, 2016 at 1:09 PM, Vedant Kumar <<a href="mailto:vsk@apple.com">vsk@apple.com</a>> wrote:<br>
> Hi Hans,<br>
><br>
> Could we take this fix for llvm 4.0?<br>
><br>
> 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.<br>
><br>
> best,<br>
> vedant<br>
><br>
>> On Jul 19, 2016, at 1:16 PM, Vedant Kumar via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br>
>><br>
>> Author: vedantk<br>
>> Date: Tue Jul 19 15:16:08 2016<br>
>> New Revision: 276015<br>
>><br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=276015&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=276015&view=rev</a><br>
>> Log:<br>
>> [tsan] Don't instrument __llvm_gcov_global_state_pred or __llvm_gcda*<br>
>><br>
>> r274801 did not go far enough to allow gcov+tsan to cooperate. With this<br>
>> commit it's possible to run the following code without false positives:<br>
>><br>
>>  std::thread T1(fib), T2(fib);<br>
>>  T1.join(); T2.join();<br>
>><br>
>> Modified:<br>
>>    llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp<br>
>>    llvm/trunk/test/Instrumentation/ThreadSanitizer/do-not-instrument-memory-access.ll<br>
>><br>
>> Modified: llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp<br>
>> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp?rev=276015&r1=276014&r2=276015&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp?rev=276015&r1=276014&r2=276015&view=diff</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp (original)<br>
>> +++ llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp Tue Jul 19 15:16:08 2016<br>
>> @@ -272,8 +272,9 @@ static bool shouldInstrumentReadWriteFro<br>
>>         return false;<br>
>>     }<br>
>><br>
>> -    // Check if the global is in a GCOV counter array.<br>
>> -    if (GV->getName().startswith("__llvm_gcov_ctr"))<br>
>> +    // Check if the global is private gcov data.<br>
>> +    if (GV->getName().startswith("__llvm_gcov") ||<br>
>> +        GV->getName().startswith("__llvm_gcda"))<br>
>>       return false;<br>
>>   }<br>
>><br>
>><br>
>> Modified: llvm/trunk/test/Instrumentation/ThreadSanitizer/do-not-instrument-memory-access.ll<br>
>> URL: <a href="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" rel="noreferrer" target="_blank">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</a><br>
>> ==============================================================================<br>
>> --- llvm/trunk/test/Instrumentation/ThreadSanitizer/do-not-instrument-memory-access.ll (original)<br>
>> +++ llvm/trunk/test/Instrumentation/ThreadSanitizer/do-not-instrument-memory-access.ll Tue Jul 19 15:16:08 2016<br>
>> @@ -13,6 +13,8 @@ target triple = "x86_64-apple-macosx10.9<br>
>><br>
>> @__llvm_gcov_ctr = internal global [1 x i64] zeroinitializer<br>
>> @__llvm_gcov_ctr.1 = internal global [1 x i64] zeroinitializer<br>
>> +@__llvm_gcov_global_state_pred = internal global i32 0<br>
>> +@__llvm_gcda_foo = internal global i32 0<br>
>><br>
>> define i32 @test_gep() sanitize_thread {<br>
>> entry:<br>
>> @@ -42,5 +44,16 @@ entry:<br>
>>   ret i32 undef<br>
>> }<br>
>><br>
>> +define void @test_load() sanitize_thread {<br>
>> +entry:<br>
>> +  %0 = load i32, i32* @__llvm_gcov_global_state_pred<br>
>> +  store i32 1, i32* @__llvm_gcov_global_state_pred<br>
>> +<br>
>> +  %1 = load i32, i32* @__llvm_gcda_foo<br>
>> +  store i32 1, i32* @__llvm_gcda_foo<br>
>> +<br>
>> +  ret void<br>
>> +}<br>
>> +<br>
>> ; CHECK-NOT: {{call void @__tsan_write}}<br>
>> ; CHECK: __tsan_init<br>
>><br>
>><br>
>> _______________________________________________<br>
>> llvm-commits mailing list<br>
>> <a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
>> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
><br>
</div></div></blockquote></div><br></div>