Index: compiler-rt/trunk/test/msan/lit.cfg =================================================================== --- compiler-rt/trunk/test/msan/lit.cfg +++ compiler-rt/trunk/test/msan/lit.cfg @@ -32,3 +32,6 @@ # MemorySanitizer tests are currently supported on Linux only. if config.host_os not in ['Linux']: config.unsupported = True + +if config.target_arch != 'aarch64': + config.available_features.add('stable-runtime') Index: compiler-rt/trunk/test/sanitizer_common/TestCases/Linux/decorate_proc_maps.cc =================================================================== --- compiler-rt/trunk/test/sanitizer_common/TestCases/Linux/decorate_proc_maps.cc +++ compiler-rt/trunk/test/sanitizer_common/TestCases/Linux/decorate_proc_maps.cc @@ -0,0 +1,61 @@ +// RUN: %clangxx -g %s -o %t +// RUN: %env_tool_opts=decorate_proc_maps=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-%tool_name +// REQUIRES: stable-runtime +#include +#include +#include +#include +#include +#include +#include + +bool CopyFdToFd(int in_fd, int out_fd) { + const size_t kBufSize = 0x10000; + static char buf[kBufSize]; + while (true) { + ssize_t got = read(in_fd, buf, kBufSize); + if (got > 0) { + write(out_fd, buf, got); + } else if (got == 0) { + break; + } else if (errno != EAGAIN || errno != EWOULDBLOCK || errno != EINTR) { + fprintf(stderr, "error reading file, errno %d\n", errno); + return false; + } + } + return true; +} + +void *ThreadFn(void *arg) { + (void)arg; + int fd = open("/proc/self/maps", O_RDONLY); + bool res = CopyFdToFd(fd, 2); + close(fd); + return (void *)!res; +} + +int main(void) { + pthread_t t; + void *res; + pthread_create(&t, 0, ThreadFn, 0); + pthread_join(t, &res); + return (int)(size_t)res; +} + +// CHECK-asan: rw-p {{.*}} [low shadow] +// CHECK-asan: ---p {{.*}} [shadow gap] +// CHECK-asan: rw-p {{.*}} [high shadow] + +// CHECK-msan: ---p {{.*}} [invalid] +// CHECK-msan: rw-p {{.*}} [shadow{{.*}}] +// CHECK-msan: ---p {{.*}} [origin{{.*}}] + +// CHECK-tsan: rw-p {{.*}} [shadow] +// CHECK-tsan: rw-p {{.*}} [meta shadow] +// CHECK-tsan: rw-p {{.*}} [trace 0] +// CHECK-tsan: rw-p {{.*}} [trace header 0] +// CHECK-tsan: rw-p {{.*}} [trace 1] +// CHECK-tsan: rw-p {{.*}} [trace header 1] + +// Nothing interesting with standalone LSan. +// CHECK-lsan: decorate_proc_maps Index: compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/decorate_proc_maps.cc =================================================================== --- compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/decorate_proc_maps.cc +++ compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/decorate_proc_maps.cc @@ -1,61 +0,0 @@ -// RUN: %clangxx -g %s -o %t -// RUN: %env_tool_opts=decorate_proc_maps=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-%tool_name -// REQUIRES: stable-runtime -#include -#include -#include -#include -#include -#include -#include - -bool CopyFdToFd(int in_fd, int out_fd) { - const size_t kBufSize = 0x10000; - static char buf[kBufSize]; - while (true) { - ssize_t got = read(in_fd, buf, kBufSize); - if (got > 0) { - write(out_fd, buf, got); - } else if (got == 0) { - break; - } else if (errno != EAGAIN || errno != EWOULDBLOCK || errno != EINTR) { - fprintf(stderr, "error reading file, errno %d\n", errno); - return false; - } - } - return true; -} - -void *ThreadFn(void *arg) { - (void)arg; - int fd = open("/proc/self/maps", O_RDONLY); - bool res = CopyFdToFd(fd, 2); - close(fd); - return (void *)!res; -} - -int main(void) { - pthread_t t; - void *res; - pthread_create(&t, 0, ThreadFn, 0); - pthread_join(t, &res); - return (int)(size_t)res; -} - -// CHECK-asan: rw-p {{.*}} [low shadow] -// CHECK-asan: ---p {{.*}} [shadow gap] -// CHECK-asan: rw-p {{.*}} [high shadow] - -// CHECK-msan: ---p {{.*}} [invalid] -// CHECK-msan: rw-p {{.*}} [shadow{{.*}}] -// CHECK-msan: ---p {{.*}} [origin{{.*}}] - -// CHECK-tsan: rw-p {{.*}} [shadow] -// CHECK-tsan: rw-p {{.*}} [meta shadow] -// CHECK-tsan: rw-p {{.*}} [trace 0] -// CHECK-tsan: rw-p {{.*}} [trace header 0] -// CHECK-tsan: rw-p {{.*}} [trace 1] -// CHECK-tsan: rw-p {{.*}} [trace header 1] - -// Nothing interesting with standalone LSan. -// CHECK-lsan: decorate_proc_maps Index: compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/lit.local.cfg =================================================================== --- compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/lit.local.cfg +++ compiler-rt/trunk/test/sanitizer_common/TestCases/Posix/lit.local.cfg @@ -5,5 +5,5 @@ root = getRoot(config) -if root.host_os in ['Windows', 'Darwin']: +if root.host_os in ['Windows']: config.unsupported = True Index: compiler-rt/trunk/test/sanitizer_common/lit.common.cfg =================================================================== --- compiler-rt/trunk/test/sanitizer_common/lit.common.cfg +++ compiler-rt/trunk/test/sanitizer_common/lit.common.cfg @@ -23,6 +23,9 @@ config.available_features.add(config.tool_name) +if config.target_arch not in ['arm', 'armhf', 'aarch64']: + config.available_features.add('stable-runtime') + if config.host_os == 'Darwin': # On Darwin, we default to `abort_on_error=1`, which would make tests run # much slower. Let's override this and run lit tests with 'abort_on_error=0'.