summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKuba Mracek <mracek@apple.com>2017-07-10 15:00:55 +0000
committerKuba Mracek <mracek@apple.com>2017-07-10 15:00:55 +0000
commit91f3fa5f31a26977adc542d45f5847d5e5ff12d3 (patch)
tree69dc0321eb8ecd5d4832eb4ecbe1fe462e1d1e8d
parent8c84699f2887f0282ae01d195a25b355c52d5726 (diff)
downloadbcm5719-llvm-91f3fa5f31a26977adc542d45f5847d5e5ff12d3.tar.gz
bcm5719-llvm-91f3fa5f31a26977adc542d45f5847d5e5ff12d3.zip
[tsan] Add support for running TSan tests on iOS simulator and devices
Differential Revision: https://reviews.llvm.org/D35157 llvm-svn: 307537
-rw-r--r--compiler-rt/lib/lsan/lsan_common.cc1
-rwxr-xr-xcompiler-rt/test/sanitizer_common/ios_commands/iossim_run.py5
-rw-r--r--compiler-rt/test/tsan/CMakeLists.txt45
-rw-r--r--compiler-rt/test/tsan/Darwin/dlopen.cc2
-rw-r--r--compiler-rt/test/tsan/Darwin/osspinlock-norace.cc5
-rw-r--r--compiler-rt/test/tsan/Darwin/xpc-cancel.mm2
-rw-r--r--compiler-rt/test/tsan/Darwin/xpc-race.mm2
-rw-r--r--compiler-rt/test/tsan/Darwin/xpc.mm2
-rw-r--r--compiler-rt/test/tsan/deep_stack1.cc9
-rw-r--r--compiler-rt/test/tsan/ignore_lib0.cc2
-rw-r--r--compiler-rt/test/tsan/lit.cfg2
-rw-r--r--compiler-rt/test/tsan/lit.site.cfg.in3
12 files changed, 72 insertions, 8 deletions
diff --git a/compiler-rt/lib/lsan/lsan_common.cc b/compiler-rt/lib/lsan/lsan_common.cc
index a5ffc6835f5..5118ae5ddb8 100644
--- a/compiler-rt/lib/lsan/lsan_common.cc
+++ b/compiler-rt/lib/lsan/lsan_common.cc
@@ -76,6 +76,7 @@ static const char kStdSuppressions[] =
#endif // SANITIZER_SUPPRESS_LEAK_ON_PTHREAD_EXIT
// TLS leak in some glibc versions, described in
// https://sourceware.org/bugzilla/show_bug.cgi?id=12650.
+ "leak:*_os_trace*\n"
"leak:*tls_get_addr*\n";
void InitializeSuppressions() {
diff --git a/compiler-rt/test/sanitizer_common/ios_commands/iossim_run.py b/compiler-rt/test/sanitizer_common/ios_commands/iossim_run.py
index 732880f3518..47b847f5329 100755
--- a/compiler-rt/test/sanitizer_common/ios_commands/iossim_run.py
+++ b/compiler-rt/test/sanitizer_common/ios_commands/iossim_run.py
@@ -8,8 +8,9 @@ if not "SANITIZER_IOSSIM_TEST_DEVICE_IDENTIFIER" in os.environ:
device_id = os.environ["SANITIZER_IOSSIM_TEST_DEVICE_IDENTIFIER"]
-if "ASAN_OPTIONS" in os.environ:
- os.environ["SIMCTL_CHILD_ASAN_OPTIONS"] = os.environ["ASAN_OPTIONS"]
+for e in ["ASAN_OPTIONS", "TSAN_OPTIONS"]:
+ if e in os.environ:
+ os.environ["SIMCTL_CHILD_" + e] = os.environ[e]
exitcode = subprocess.call(["xcrun", "simctl", "spawn", device_id] + sys.argv[1:])
if exitcode > 125:
diff --git a/compiler-rt/test/tsan/CMakeLists.txt b/compiler-rt/test/tsan/CMakeLists.txt
index 2db6ce0a8c1..37b309d64a8 100644
--- a/compiler-rt/test/tsan/CMakeLists.txt
+++ b/compiler-rt/test/tsan/CMakeLists.txt
@@ -1,3 +1,5 @@
+set(TSAN_LIT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
+
set(TSAN_TEST_DEPS ${SANITIZER_COMMON_LIT_TEST_DEPS})
if(${COMPILER_RT_DEFAULT_TARGET_ARCH} MATCHES "x86_64")
list(APPEND TSAN_TEST_DEPS GotsanRuntimeCheck)
@@ -22,6 +24,11 @@ if(APPLE)
endif()
foreach(arch ${TSAN_TEST_ARCH})
+ set(TSAN_TEST_IOS "0")
+ pythonize_bool(TSAN_TEST_IOS)
+ set(TSAN_TEST_IOSSIM "0")
+ pythonize_bool(TSAN_TEST_IOSSIM)
+
set(TSAN_TEST_TARGET_ARCH ${arch})
string(TOLOWER "-${arch}" TSAN_TEST_CONFIG_SUFFIX)
get_test_cc_for_arch(${arch} TSAN_TEST_TARGET_CC TSAN_TEST_TARGET_CFLAGS)
@@ -35,6 +42,44 @@ foreach(arch ${TSAN_TEST_ARCH})
list(APPEND TSAN_TESTSUITES ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME})
endforeach()
+# iOS and iOS simulator test suites
+# These are not added into "check-all", in order to run these tests, you have to
+# manually call (from the build directory). They also require that an extra env
+# variable to select which iOS device or simulator to use, e.g.:
+# $ SANITIZER_IOSSIM_TEST_DEVICE_IDENTIFIER=BBE44C1C-8AAA-4000-8D06-91C89ED58172
+# $ ./bin/llvm-lit ./projects/compiler-rt/test/tsan/IOSSimX86_64Config
+if(APPLE)
+ set(TSAN_TEST_TARGET_CC ${COMPILER_RT_TEST_COMPILER})
+ set(TSAN_TEST_IOS "1")
+ pythonize_bool(TSAN_TEST_IOS)
+
+ set(arch "x86_64")
+ set(TSAN_TEST_IOSSIM "1")
+ pythonize_bool(TSAN_TEST_IOSSIM)
+ set(TSAN_TEST_TARGET_ARCH ${arch})
+ set(TSAN_TEST_TARGET_CFLAGS "-arch ${arch} -isysroot ${DARWIN_iossim_SYSROOT} ${COMPILER_RT_TEST_COMPILER_CFLAGS}")
+ set(TSAN_TEST_CONFIG_SUFFIX "-${arch}-iossim")
+ string(TOUPPER ${arch} ARCH_UPPER_CASE)
+ set(CONFIG_NAME "IOSSim${ARCH_UPPER_CASE}Config")
+ configure_lit_site_cfg(
+ ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in
+ ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/lit.site.cfg
+ )
+
+ set(arch "arm64")
+ set(TSAN_TEST_IOSSIM "0")
+ pythonize_bool(TSAN_TEST_IOSSIM)
+ set(TSAN_TEST_TARGET_ARCH ${arch})
+ set(TSAN_TEST_TARGET_CFLAGS "-arch ${arch} -isysroot ${DARWIN_ios_SYSROOT} ${COMPILER_RT_TEST_COMPILER_CFLAGS}")
+ set(TSAN_TEST_CONFIG_SUFFIX "-${arch}-ios")
+ string(TOUPPER ${arch} ARCH_UPPER_CASE)
+ set(CONFIG_NAME "IOS${ARCH_UPPER_CASE}Config")
+ configure_lit_site_cfg(
+ ${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.in
+ ${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/lit.site.cfg
+ )
+endif()
+
if(COMPILER_RT_INCLUDE_TESTS)
configure_lit_site_cfg(
${CMAKE_CURRENT_SOURCE_DIR}/Unit/lit.site.cfg.in
diff --git a/compiler-rt/test/tsan/Darwin/dlopen.cc b/compiler-rt/test/tsan/Darwin/dlopen.cc
index 7382a6de28c..3d12b815f9c 100644
--- a/compiler-rt/test/tsan/Darwin/dlopen.cc
+++ b/compiler-rt/test/tsan/Darwin/dlopen.cc
@@ -4,6 +4,8 @@
// REQUIRES: osx-autointerception
+// XFAIL: ios
+
// RUN: %clangxx_tsan %s -o %t.so -shared -DSHARED_LIB
// RUN: %clangxx_tsan -fno-sanitize=thread %s -o %t
diff --git a/compiler-rt/test/tsan/Darwin/osspinlock-norace.cc b/compiler-rt/test/tsan/Darwin/osspinlock-norace.cc
index 2ac3989c223..837da3b179f 100644
--- a/compiler-rt/test/tsan/Darwin/osspinlock-norace.cc
+++ b/compiler-rt/test/tsan/Darwin/osspinlock-norace.cc
@@ -1,8 +1,11 @@
// RUN: %clangxx_tsan -O1 %s -o %t && %run %t 2>&1 | FileCheck %s
-#include <libkern/OSAtomic.h>
#include <pthread.h>
#include <stdio.h>
+typedef int32_t OSSpinLock;
+extern "C" void OSSpinLockLock(OSSpinLock *);
+extern "C" void OSSpinLockUnlock(OSSpinLock *);
+
int Global;
OSSpinLock lock;
diff --git a/compiler-rt/test/tsan/Darwin/xpc-cancel.mm b/compiler-rt/test/tsan/Darwin/xpc-cancel.mm
index 91dafc3eadd..ac7aed08c16 100644
--- a/compiler-rt/test/tsan/Darwin/xpc-cancel.mm
+++ b/compiler-rt/test/tsan/Darwin/xpc-cancel.mm
@@ -1,7 +1,7 @@
// RUN: %clang_tsan %s -o %t -framework Foundation
// RUN: %run %t 2>&1 | FileCheck %s
-// XFAIL: ios
+// UNSUPPORTED: ios
#import <Foundation/Foundation.h>
#import <xpc/xpc.h>
diff --git a/compiler-rt/test/tsan/Darwin/xpc-race.mm b/compiler-rt/test/tsan/Darwin/xpc-race.mm
index 2e965e4a0a1..a1e214c12b7 100644
--- a/compiler-rt/test/tsan/Darwin/xpc-race.mm
+++ b/compiler-rt/test/tsan/Darwin/xpc-race.mm
@@ -1,7 +1,7 @@
// RUN: %clang_tsan %s -o %t -framework Foundation
// RUN: %deflake %run %t 2>&1 | FileCheck %s
-// XFAIL: ios
+// UNSUPPORTED: ios
#import <Foundation/Foundation.h>
#import <xpc/xpc.h>
diff --git a/compiler-rt/test/tsan/Darwin/xpc.mm b/compiler-rt/test/tsan/Darwin/xpc.mm
index c5e78a5779e..036841ed712 100644
--- a/compiler-rt/test/tsan/Darwin/xpc.mm
+++ b/compiler-rt/test/tsan/Darwin/xpc.mm
@@ -1,7 +1,7 @@
// RUN: %clang_tsan %s -o %t -framework Foundation
// RUN: %run %t 2>&1 | FileCheck %s
-// XFAIL: ios
+// UNSUPPORTED: ios
#import <Foundation/Foundation.h>
#import <xpc/xpc.h>
diff --git a/compiler-rt/test/tsan/deep_stack1.cc b/compiler-rt/test/tsan/deep_stack1.cc
index 39185efee7a..e5640832299 100644
--- a/compiler-rt/test/tsan/deep_stack1.cc
+++ b/compiler-rt/test/tsan/deep_stack1.cc
@@ -24,6 +24,10 @@ void *Thread(void *p) {
return 0;
}
+static size_t RoundUp(size_t n, size_t to) {
+ return ((n + to - 1) / to) * to;
+}
+
int main() {
barrier_init(&barrier, 2);
N = 50000;
@@ -31,7 +35,10 @@ int main() {
pthread_t t;
pthread_attr_t a;
pthread_attr_init(&a);
- pthread_attr_setstacksize(&a, N * 256 + (1 << 20));
+ size_t stack_size = N * 256 + (1 << 20);
+ stack_size = RoundUp(stack_size, 0x10000); // round the stack size to 64k
+ int ret = pthread_attr_setstacksize(&a, stack_size);
+ if (ret) abort();
pthread_create(&t, &a, Thread, 0);
#ifdef ORDER2
barrier_wait(&barrier);
diff --git a/compiler-rt/test/tsan/ignore_lib0.cc b/compiler-rt/test/tsan/ignore_lib0.cc
index d6ae72f3163..84632019fcc 100644
--- a/compiler-rt/test/tsan/ignore_lib0.cc
+++ b/compiler-rt/test/tsan/ignore_lib0.cc
@@ -11,6 +11,8 @@
// Some aarch64 kernels do not support non executable write pages
// REQUIRES: stable-runtime
+// UNSUPPORTED: ios
+
#ifndef LIB
extern "C" void libfunc();
diff --git a/compiler-rt/test/tsan/lit.cfg b/compiler-rt/test/tsan/lit.cfg
index 3c98d1fdca7..0ab62db0907 100644
--- a/compiler-rt/test/tsan/lit.cfg
+++ b/compiler-rt/test/tsan/lit.cfg
@@ -66,7 +66,7 @@ if config.has_libcxx and config.host_os != 'Darwin':
"-Wl,-rpath=%s" % libcxx_libdir]
def build_invocation(compile_flags):
- return " " + " ".join([config.clang] + compile_flags) + " "
+ return " " + " ".join([config.compile_wrapper, config.clang] + compile_flags) + " "
config.substitutions.append( ("%clang_tsan ", build_invocation(clang_tsan_cflags)) )
config.substitutions.append( ("%clangxx_tsan ", build_invocation(clang_tsan_cxxflags)) )
diff --git a/compiler-rt/test/tsan/lit.site.cfg.in b/compiler-rt/test/tsan/lit.site.cfg.in
index a87e8d25d6b..a215e664a5b 100644
--- a/compiler-rt/test/tsan/lit.site.cfg.in
+++ b/compiler-rt/test/tsan/lit.site.cfg.in
@@ -1,7 +1,10 @@
@LIT_SITE_CFG_IN_HEADER@
config.name_suffix = "@TSAN_TEST_CONFIG_SUFFIX@"
+config.tsan_lit_source_dir = "@TSAN_LIT_SOURCE_DIR@"
config.has_libcxx = @TSAN_HAS_LIBCXX@
+config.ios = @TSAN_TEST_IOS_PYBOOL@
+config.iossim = @TSAN_TEST_IOSSIM_PYBOOL@
config.target_cflags = "@TSAN_TEST_TARGET_CFLAGS@"
config.target_arch = "@TSAN_TEST_TARGET_ARCH@"
OpenPOWER on IntegriCloud