summaryrefslogtreecommitdiffstats
path: root/compiler-rt
diff options
context:
space:
mode:
authorAlex Shlyapnikov <alekseys@google.com>2017-04-20 20:54:19 +0000
committerAlex Shlyapnikov <alekseys@google.com>2017-04-20 20:54:19 +0000
commitbdbb894a52997c1679d7f716397435c95e637fb3 (patch)
tree8349797c7945f1098c7d87e42073640ef0924bd3 /compiler-rt
parent17f37ba3b97d281b258b552b4be5fde6da6df08a (diff)
downloadbcm5719-llvm-bdbb894a52997c1679d7f716397435c95e637fb3.tar.gz
bcm5719-llvm-bdbb894a52997c1679d7f716397435c95e637fb3.zip
Define a suppression for known leaks on pthread_exit call.
Summary: Refer to D32194 for the context. Reviewers: eugenis Subscribers: kubamracek, llvm-commits Differential Revision: https://reviews.llvm.org/D32303 llvm-svn: 300886
Diffstat (limited to 'compiler-rt')
-rw-r--r--compiler-rt/lib/asan/tests/asan_test_main.cc9
-rw-r--r--compiler-rt/lib/lsan/lsan_common.cc6
-rw-r--r--compiler-rt/lib/sanitizer_common/sanitizer_platform.h11
3 files changed, 20 insertions, 6 deletions
diff --git a/compiler-rt/lib/asan/tests/asan_test_main.cc b/compiler-rt/lib/asan/tests/asan_test_main.cc
index 4b72f0aea04..0c1b93c7fda 100644
--- a/compiler-rt/lib/asan/tests/asan_test_main.cc
+++ b/compiler-rt/lib/asan/tests/asan_test_main.cc
@@ -22,13 +22,10 @@ extern "C" const char* __asan_default_options() {
// turn symbolization off to speed up testing, especially when not running
// with llvm-symbolizer but with atos.
return "symbolize=false:abort_on_error=0:log_to_syslog=0";
-#elif SANITIZER_PPC || defined(__thumb__)
+#elif SANITIZER_SUPPRESS_LEAK_ON_PTHREAD_EXIT
// On PowerPC and ARM Thumb, a couple tests involving pthread_exit fail due to
- // leaks detected by LSan. pthread_exit tries to perform unwinding that leads
- // to dlopen'ing libgcc_s.so. dlopen mallocs "libgcc_s.so" string which
- // confuses LSan, it fails to realize that this allocation happens in dynamic
- // linker and should be ignored. Symbolized leak report is required to define
- // a suppression for this known problem.
+ // leaks detected by LSan. Symbolized leak report is required to apply a
+ // suppression for this known problem.
return "";
#else
// Let's turn symbolization off to speed up testing (more than 3 times speedup
diff --git a/compiler-rt/lib/lsan/lsan_common.cc b/compiler-rt/lib/lsan/lsan_common.cc
index 3523049d37a..d54f56958e5 100644
--- a/compiler-rt/lib/lsan/lsan_common.cc
+++ b/compiler-rt/lib/lsan/lsan_common.cc
@@ -848,7 +848,13 @@ int __lsan_is_turned_off() {
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
const char *__lsan_default_suppressions() {
+#if SANITIZER_SUPPRESS_LEAK_ON_PTHREAD_EXIT
+ // The actual string allocation happens here (for more details refer to the
+ // SANITIZER_SUPPRESS_LEAK_ON_PTHREAD_EXIT definition).
+ return "leak:*_dl_map_object_deps*";
+#else
return "";
+#endif // SANITIZER_SUPPRESS_LEAK_ON_PTHREAD_EXIT
}
#endif
} // extern "C"
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform.h b/compiler-rt/lib/sanitizer_common/sanitizer_platform.h
index 1a641087857..49732aa3232 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_platform.h
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform.h
@@ -259,4 +259,15 @@
# define SANITIZER_GO 0
#endif
+// On PowerPC and ARM Thumb, calling pthread_exit() causes LSan to detect leaks.
+// pthread_exit() performs unwinding that leads to dlopen'ing libgcc_s.so.
+// dlopen mallocs "libgcc_s.so" string which confuses LSan, it fails to realize
+// that this allocation happens in dynamic linker and should be ignored.
+#if SANITIZER_PPC || defined(__thumb__)
+# define SANITIZER_SUPPRESS_LEAK_ON_PTHREAD_EXIT 1
+#else
+# define SANITIZER_SUPPRESS_LEAK_ON_PTHREAD_EXIT 0
+#endif
+
+
#endif // SANITIZER_PLATFORM_H
OpenPOWER on IntegriCloud