[compiler-rt] r223477 - [ASan] Fix Win build following r223419.
Timur Iskhodzhanov
timurrrr at google.com
Wed Dec 24 06:50:56 PST 2014
llvm.org/PR22025
Wed Dec 24 2014 at 5:22:37 PM, Timur Iskhodzhanov <timurrrr at google.com>:
> In fact this is still incorrect if a thread is started in a suspended
> state, which is not rare on Windows.
>
> On Fri Dec 05 2014 at 7:57:22 PM Sergey Matveev <earthdok at google.com>
> wrote:
>
>> Author: smatveev
>> Date: Fri Dec 5 10:53:58 2014
>> New Revision: 223477
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=223477&view=rev
>> Log:
>> [ASan] Fix Win build following r223419.
>>
>> Modified:
>> compiler-rt/trunk/lib/asan/asan_interceptors.cc
>>
>> Modified: compiler-rt/trunk/lib/asan/asan_interceptors.cc
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/as
>> an/asan_interceptors.cc?rev=223477&r1=223476&r2=223477&view=diff
>> ============================================================
>> ==================
>> --- compiler-rt/trunk/lib/asan/asan_interceptors.cc (original)
>> +++ compiler-rt/trunk/lib/asan/asan_interceptors.cc Fri Dec 5 10:53:58
>> 2014
>> @@ -731,13 +731,25 @@ INTERCEPTOR_WINAPI(DWORD, CreateThread,
>> if (flags()->strict_init_order)
>> StopInitOrderChecking();
>> GET_STACK_TRACE_THREAD;
>> - u32 current_tid = GetCurrentTidOrInvalid();
>> - AsanThread *t = AsanThread::Create(start_routine, arg);
>> - CreateThreadContextArgs args = { t, &stack };
>> bool detached = false; // FIXME: how can we determine it on Windows?
>> - asanThreadRegistry().CreateThread(*(uptr*)t, detached, current_tid,
>> &args);
>> - return REAL(CreateThread)(security, stack_size,
>> - asan_thread_start, t, thr_flags, tid);
>> + ThreadStartParam param;
>> + atomic_store(¶m.t, 0, memory_order_relaxed);
>> + atomic_store(¶m.is_registered, 0, memory_order_relaxed);
>> + DWORD result = REAL(CreateThread)(security, stack_size,
>> asan_thread_start,
>> + ¶m, thr_flags, tid);
>> + if (result) {
>> + u32 current_tid = GetCurrentTidOrInvalid();
>> + AsanThread *t = AsanThread::Create(start_routine, arg);
>> + CreateThreadContextArgs args = { t, &stack };
>> + asanThreadRegistry().CreateThread(*reinterpret_cast<uptr *>(t),
>> detached,
>> + current_tid, &args);
>> + atomic_store(¶m.t, reinterpret_cast<uptr>(t),
>> memory_order_release);
>> + // The pthread_create interceptor waits here, so we do the same for
>> + // consistency.
>> + while (atomic_load(¶m.is_registered, memory_order_acquire) == 0)
>> + internal_sched_yield();
>> + }
>> + return result;
>> }
>>
>> namespace __asan {
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20141224/8c2b932a/attachment.html>
More information about the llvm-commits
mailing list