summaryrefslogtreecommitdiff
path: root/test/lsan
diff options
context:
space:
mode:
authorMaxim Ostapenko <chefmax7@gmail.com>2017-04-11 08:13:38 +0000
committerMaxim Ostapenko <chefmax7@gmail.com>2017-04-11 08:13:38 +0000
commit77094f117908a9b2f3b2cb4ebe5dbf6c744a851d (patch)
treedfb7edbdacf51c1c19728eeec5dce0d8e4f90840 /test/lsan
parent769089a0ba7eaefe9d6670fa2c49850e50151364 (diff)
[lsan] Enable LSan for arm Linux
This patch enables LSan for arm Linux. Differential Revision: https://reviews.llvm.org/D29586 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@299923 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/lsan')
-rw-r--r--test/lsan/TestCases/large_allocation_leak.cc2
-rw-r--r--test/lsan/TestCases/swapcontext.cc8
-rw-r--r--test/lsan/TestCases/use_registers.cc5
-rw-r--r--test/lsan/TestCases/use_tls_dynamic.cc2
-rw-r--r--test/lsan/lit.common.cfg7
5 files changed, 18 insertions, 6 deletions
diff --git a/test/lsan/TestCases/large_allocation_leak.cc b/test/lsan/TestCases/large_allocation_leak.cc
index 7254f9cbe..c3da932a4 100644
--- a/test/lsan/TestCases/large_allocation_leak.cc
+++ b/test/lsan/TestCases/large_allocation_leak.cc
@@ -5,7 +5,7 @@
// For 32 bit LSan it's pretty likely that large chunks are "reachable" from some
// internal data structures (e.g. Glibc global data).
-// UNSUPPORTED: x86
+// UNSUPPORTED: x86, arm
#include <stdio.h>
#include <stdlib.h>
diff --git a/test/lsan/TestCases/swapcontext.cc b/test/lsan/TestCases/swapcontext.cc
index f7e95ed2c..f990526cf 100644
--- a/test/lsan/TestCases/swapcontext.cc
+++ b/test/lsan/TestCases/swapcontext.cc
@@ -2,8 +2,10 @@
// memory. Make sure we don't report these leaks.
// RUN: %clangxx_lsan %s -o %t
-// RUN: %run %t 2>&1
-// RUN: not %run %t foo 2>&1 | FileCheck %s
+// RUN: LSAN_BASE="detect_leaks=1"
+// RUN: LSAN_OPTIONS=$LSAN_BASE %run %t 2>&1
+// RUN: LSAN_OPTIONS=$LSAN_BASE not %run %t foo 2>&1 | FileCheck %s
+// UNSUPPORTED: arm
#include <stdio.h>
#if defined(__APPLE__)
@@ -23,7 +25,7 @@ void Child() {
}
int main(int argc, char *argv[]) {
- char stack_memory[kStackSize + 1];
+ char stack_memory[kStackSize + 1] __attribute__((aligned(16)));
char *heap_memory = new char[kStackSize + 1];
char *child_stack = (argc > 1) ? stack_memory : heap_memory;
diff --git a/test/lsan/TestCases/use_registers.cc b/test/lsan/TestCases/use_registers.cc
index 789687401..2fe13318e 100644
--- a/test/lsan/TestCases/use_registers.cc
+++ b/test/lsan/TestCases/use_registers.cc
@@ -33,6 +33,11 @@ void *registers_thread_func(void *arg) {
:
: "r" (p)
);
+#elif defined(__arm__)
+ asm ( "mov r5, %0"
+ :
+ : "r" (p)
+ );
#else
#error "Test is not supported on this architecture."
#endif
diff --git a/test/lsan/TestCases/use_tls_dynamic.cc b/test/lsan/TestCases/use_tls_dynamic.cc
index c20232dc3..6af82d59e 100644
--- a/test/lsan/TestCases/use_tls_dynamic.cc
+++ b/test/lsan/TestCases/use_tls_dynamic.cc
@@ -5,7 +5,7 @@
// RUN: LSAN_OPTIONS=$LSAN_BASE:"use_tls=0" not %run %t 2>&1 | FileCheck %s
// RUN: LSAN_OPTIONS=$LSAN_BASE:"use_tls=1" %run %t 2>&1
// RUN: LSAN_OPTIONS="" %run %t 2>&1
-// UNSUPPORTED: i386-linux,i686-linux
+// UNSUPPORTED: i386-linux,i686-linux,arm
#ifndef BUILD_DSO
#include <assert.h>
diff --git a/test/lsan/lit.common.cfg b/test/lsan/lit.common.cfg
index 8580eec33..f47d76e6d 100644
--- a/test/lsan/lit.common.cfg
+++ b/test/lsan/lit.common.cfg
@@ -3,6 +3,7 @@
# Common configuration for running leak detection tests under LSan/ASan.
import os
+import re
import lit.util
@@ -52,7 +53,11 @@ config.substitutions.append( ("%clang_lsan ", build_invocation(clang_lsan_cflags
config.substitutions.append( ("%clangxx_lsan ", build_invocation(clang_lsan_cxxflags)) )
# LeakSanitizer tests are currently supported on x86-64 Linux and mips64 Linux only.
-if config.host_os not in ['Linux'] or config.host_arch not in ['x86_64', 'mips64']:
+if config.host_os not in ['Linux'] or config.host_arch not in ['x86_64', 'mips64', 'arm', 'armhf']:
+ config.unsupported = True
+
+# Don't support Thumb due to broken fast unwinder
+if re.match('-mthumb', config.target_cflags):
config.unsupported = True
config.suffixes = ['.c', '.cc', '.cpp']