[compiler-rt] r180106 - [ASan] Disable strict-init-order checker once we have more than one thread, as this mode is thread-hostile

Alexey Samsonov samsonov at google.com
Tue Apr 23 06:57:35 PDT 2013


Author: samsonov
Date: Tue Apr 23 08:57:35 2013
New Revision: 180106

URL: http://llvm.org/viewvc/llvm-project?rev=180106&view=rev
Log:
[ASan] Disable strict-init-order checker once we have more than one thread, as this mode is thread-hostile

Modified:
    compiler-rt/trunk/lib/asan/asan_interceptors.cc
    compiler-rt/trunk/lib/asan/lit_tests/init-order-dlopen.cc

Modified: compiler-rt/trunk/lib/asan/asan_interceptors.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_interceptors.cc?rev=180106&r1=180105&r2=180106&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/asan_interceptors.cc (original)
+++ compiler-rt/trunk/lib/asan/asan_interceptors.cc Tue Apr 23 08:57:35 2013
@@ -94,6 +94,11 @@ void SetThreadName(const char *name) {
     asanThreadRegistry().SetThreadName(t->tid(), name);
 }
 
+static void DisableStrictInitOrderChecker() {
+  if (flags()->strict_init_order)
+    flags()->check_initialization_order = false;
+}
+
 }  // namespace __asan
 
 // ---------------------- Wrappers ---------------- {{{1
@@ -132,6 +137,8 @@ extern "C" int pthread_attr_getdetachsta
 
 INTERCEPTOR(int, pthread_create, void *thread,
     void *attr, void *(*start_routine)(void*), void *arg) {
+  // Strict init-order checking in thread-hostile.
+  DisableStrictInitOrderChecker();
   GET_STACK_TRACE_THREAD;
   int detached = 0;
   if (attr != 0)
@@ -639,6 +646,8 @@ INTERCEPTOR_WINAPI(DWORD, CreateThread,
                    void* security, uptr stack_size,
                    DWORD (__stdcall *start_routine)(void*), void* arg,
                    DWORD flags, void* tid) {
+  // Strict init-order checking in thread-hostile.
+  DisableStrictInitOrderChecker();
   GET_STACK_TRACE_THREAD;
   u32 current_tid = GetCurrentTidOrInvalid();
   AsanThread *t = AsanThread::Create(start_routine, arg);

Modified: compiler-rt/trunk/lib/asan/lit_tests/init-order-dlopen.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/lit_tests/init-order-dlopen.cc?rev=180106&r1=180105&r2=180106&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/lit_tests/init-order-dlopen.cc (original)
+++ compiler-rt/trunk/lib/asan/lit_tests/init-order-dlopen.cc Tue Apr 23 08:57:35 2013
@@ -4,7 +4,7 @@
 // RUN: %clangxx_asan -m64 -O0 %p/SharedLibs/init-order-dlopen-so.cc \
 // RUN:     -fPIC -shared -o %t-so.so
 // RUN: %clangxx_asan -m64 -O0 %s -o %t -Wl,--export-dynamic
-// RUN: ASAN_OPTIONS=check_initialization_order=true %t 2>&1 | FileCheck %s
+// RUN: ASAN_OPTIONS=check_initialization_order=true:strict_init_order=true %t 2>&1 | FileCheck %s
 #include <dlfcn.h>
 #include <pthread.h>
 #include <stdio.h>





More information about the llvm-commits mailing list