diff options
| author | Alex Shlyapnikov <alekseys@google.com> | 2017-04-20 20:54:19 +0000 |
|---|---|---|
| committer | Alex Shlyapnikov <alekseys@google.com> | 2017-04-20 20:54:19 +0000 |
| commit | bdbb894a52997c1679d7f716397435c95e637fb3 (patch) | |
| tree | 8349797c7945f1098c7d87e42073640ef0924bd3 /compiler-rt | |
| parent | 17f37ba3b97d281b258b552b4be5fde6da6df08a (diff) | |
| download | bcm5719-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.cc | 9 | ||||
| -rw-r--r-- | compiler-rt/lib/lsan/lsan_common.cc | 6 | ||||
| -rw-r--r-- | compiler-rt/lib/sanitizer_common/sanitizer_platform.h | 11 |
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 |

