diff options
author | Alexey Samsonov <samsonov@google.com> | 2013-04-23 13:57:35 +0000 |
---|---|---|
committer | Alexey Samsonov <samsonov@google.com> | 2013-04-23 13:57:35 +0000 |
commit | bdd0966deb04068ea94cf416c7fb46516013bd26 (patch) | |
tree | 16577ef1c0d4b2206436f69fa28a97aa1a32acd3 | |
parent | 11347bf5f008b5970f699241617381d95526d73d (diff) |
[ASan] Disable strict-init-order checker once we have more than one thread, as this mode is thread-hostile
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@180106 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/asan/asan_interceptors.cc | 9 | ||||
-rw-r--r-- | lib/asan/lit_tests/init-order-dlopen.cc | 2 |
2 files changed, 10 insertions, 1 deletions
diff --git a/lib/asan/asan_interceptors.cc b/lib/asan/asan_interceptors.cc index 8a954bd67..1a6d95ec5 100644 --- a/lib/asan/asan_interceptors.cc +++ b/lib/asan/asan_interceptors.cc @@ -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_getdetachstate(void *attr, int *v); 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); diff --git a/lib/asan/lit_tests/init-order-dlopen.cc b/lib/asan/lit_tests/init-order-dlopen.cc index 39fe9dfcd..5d3b557e7 100644 --- a/lib/asan/lit_tests/init-order-dlopen.cc +++ b/lib/asan/lit_tests/init-order-dlopen.cc @@ -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> |