aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Samsonov <samsonov@google.com>2013-04-23 13:57:35 +0000
committerAlexey Samsonov <samsonov@google.com>2013-04-23 13:57:35 +0000
commitbdd0966deb04068ea94cf416c7fb46516013bd26 (patch)
tree16577ef1c0d4b2206436f69fa28a97aa1a32acd3
parent11347bf5f008b5970f699241617381d95526d73d (diff)
downloadcompiler-rt-bdd0966deb04068ea94cf416c7fb46516013bd26.tar.gz
[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.cc9
-rw-r--r--lib/asan/lit_tests/init-order-dlopen.cc2
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>