diff options
author | Alexey Samsonov <samsonov@google.com> | 2013-09-03 13:22:51 +0000 |
---|---|---|
committer | Alexey Samsonov <samsonov@google.com> | 2013-09-03 13:22:51 +0000 |
commit | 68c016aea0b61f649b9d9ba65c7d7217e0c0f6cb (patch) | |
tree | b0926cc43f6e73470de5979587ebe2da942f088f | |
parent | 1dcd1d9d1c86ab9b728386d261fbebe00b32e097 (diff) | |
download | compiler-rt-68c016aea0b61f649b9d9ba65c7d7217e0c0f6cb.tar.gz compiler-rt-68c016aea0b61f649b9d9ba65c7d7217e0c0f6cb.tar.bz2 compiler-rt-68c016aea0b61f649b9d9ba65c7d7217e0c0f6cb.tar.xz |
ASan, LSan, MSan: try to find llvm-symbolizer binary in PATH if it is not provided. Now we don't need to explicitly set the location of llvm-symbolizer in lit test configs.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@189801 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/asan/asan_rtl.cc | 6 | ||||
-rw-r--r-- | lib/asan/lit_tests/lit.cfg | 3 | ||||
-rw-r--r-- | lib/lsan/lit_tests/AsanConfig/lit.cfg | 1 | ||||
-rw-r--r-- | lib/lsan/lit_tests/LsanConfig/lit.cfg | 2 | ||||
-rw-r--r-- | lib/lsan/lsan.cc | 9 | ||||
-rw-r--r-- | lib/msan/lit_tests/lit.cfg | 3 | ||||
-rw-r--r-- | lib/msan/msan.cc | 3 | ||||
-rw-r--r-- | lib/sanitizer_common/sanitizer_symbolizer.h | 3 | ||||
-rw-r--r-- | lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc | 5 |
9 files changed, 14 insertions, 21 deletions
diff --git a/lib/asan/asan_rtl.cc b/lib/asan/asan_rtl.cc index 46b79a61..ee2128f2 100644 --- a/lib/asan/asan_rtl.cc +++ b/lib/asan/asan_rtl.cc @@ -532,10 +532,8 @@ void __asan_init() { InitializeAllocator(); // Start symbolizer process if necessary. - const char* external_symbolizer = common_flags()->external_symbolizer_path; - if (common_flags()->symbolize && external_symbolizer && - external_symbolizer[0]) { - InitializeExternalSymbolizer(external_symbolizer); + if (common_flags()->symbolize) { + InitializeExternalSymbolizer(common_flags()->external_symbolizer_path); } // On Linux AsanThread::ThreadStart() calls malloc() that's why asan_inited diff --git a/lib/asan/lit_tests/lit.cfg b/lib/asan/lit_tests/lit.cfg index 317ec6f1..16e3565c 100644 --- a/lib/asan/lit_tests/lit.cfg +++ b/lib/asan/lit_tests/lit.cfg @@ -70,9 +70,6 @@ config.substitutions.append( ("%clang_asan ", (" " + config.clang + " " + config.substitutions.append( ("%clangxx_asan ", (" " + config.clang + " " + clang_asan_cxxflags + " ")) ) -# Setup path to external LLVM symbolizer to run AddressSanitizer output tests. -config.environment['ASAN_SYMBOLIZER_PATH'] = config.llvm_symbolizer_path - # Setup path to asan_symbolize.py script. asan_source_dir = get_required_attr(config, "asan_source_dir") asan_symbolize = os.path.join(asan_source_dir, "scripts", "asan_symbolize.py") diff --git a/lib/lsan/lit_tests/AsanConfig/lit.cfg b/lib/lsan/lit_tests/AsanConfig/lit.cfg index 8b0bbadf..ae919817 100644 --- a/lib/lsan/lit_tests/AsanConfig/lit.cfg +++ b/lib/lsan/lit_tests/AsanConfig/lit.cfg @@ -30,4 +30,3 @@ config.substitutions.append( ("%clang_lsan ", (" " + config.clang + " " + clang_lsan_cflags + " ")) ) config.environment['ASAN_OPTIONS'] = 'detect_leaks=1' -config.environment['ASAN_SYMBOLIZER_PATH'] = config.llvm_symbolizer_path diff --git a/lib/lsan/lit_tests/LsanConfig/lit.cfg b/lib/lsan/lit_tests/LsanConfig/lit.cfg index 21d7fd83..84faf916 100644 --- a/lib/lsan/lit_tests/LsanConfig/lit.cfg +++ b/lib/lsan/lit_tests/LsanConfig/lit.cfg @@ -28,5 +28,3 @@ clang_lsan_cflags = config.clang_cflags + " -fsanitize=leak " config.substitutions.append( ("%clang_lsan ", (" " + config.clang + " " + clang_lsan_cflags + " ")) ) - -config.environment['LSAN_SYMBOLIZER_PATH'] = config.llvm_symbolizer_path diff --git a/lib/lsan/lsan.cc b/lib/lsan/lsan.cc index 22e18e2a..99b165b5 100644 --- a/lib/lsan/lsan.cc +++ b/lib/lsan/lsan.cc @@ -25,8 +25,7 @@ namespace __lsan { static void InitializeCommonFlags() { CommonFlags *cf = common_flags(); cf->external_symbolizer_path = GetEnv("LSAN_SYMBOLIZER_PATH"); - cf->symbolize = (cf->external_symbolizer_path && - cf->external_symbolizer_path[0]); + cf->symbolize = true; cf->strip_path_prefix = ""; cf->fast_unwind_on_malloc = true; cf->malloc_context_size = 30; @@ -53,10 +52,8 @@ void Init() { SetCurrentThread(tid); // Start symbolizer process if necessary. - const char* external_symbolizer = common_flags()->external_symbolizer_path; - if (common_flags()->symbolize && external_symbolizer && - external_symbolizer[0]) { - InitializeExternalSymbolizer(external_symbolizer); + if (common_flags()->symbolize) { + InitializeExternalSymbolizer(common_flags()->external_symbolizer_path); } InitCommonLsan(); diff --git a/lib/msan/lit_tests/lit.cfg b/lib/msan/lit_tests/lit.cfg index 093ad943..fd88ca04 100644 --- a/lib/msan/lit_tests/lit.cfg +++ b/lib/msan/lit_tests/lit.cfg @@ -65,9 +65,6 @@ config.substitutions.append( ("%clangxx_msan ", " ".join([config.clang] + clang_msan_cxxflags) + " ") ) -# Setup path to external LLVM symbolizer to run MemorySanitizer output tests. -config.environment['MSAN_SYMBOLIZER_PATH'] = config.llvm_symbolizer_path - # Default test suffixes. config.suffixes = ['.c', '.cc', '.cpp'] diff --git a/lib/msan/msan.cc b/lib/msan/msan.cc index 0134fe1c..afe7f8e7 100644 --- a/lib/msan/msan.cc +++ b/lib/msan/msan.cc @@ -324,8 +324,9 @@ void __msan_init() { } const char *external_symbolizer = common_flags()->external_symbolizer_path; + bool symbolizer_started = InitializeExternalSymbolizer(external_symbolizer); if (external_symbolizer && external_symbolizer[0]) { - CHECK(InitializeExternalSymbolizer(external_symbolizer)); + CHECK(symbolizer_started); } GetThreadStackTopAndBottom(/* at_initialization */true, diff --git a/lib/sanitizer_common/sanitizer_symbolizer.h b/lib/sanitizer_common/sanitizer_symbolizer.h index 3f3149cb..90ee784f 100644 --- a/lib/sanitizer_common/sanitizer_symbolizer.h +++ b/lib/sanitizer_common/sanitizer_symbolizer.h @@ -79,7 +79,8 @@ const char *Demangle(const char *name); const char *DemangleCXXABI(const char *name); // Starts external symbolizer program in a subprocess. Sanitizer communicates -// with external symbolizer via pipes. +// with external symbolizer via pipes. If path_to_symbolizer is NULL or empty, +// tries to look for llvm-symbolizer in PATH. bool InitializeExternalSymbolizer(const char *path_to_symbolizer); const int kSymbolizerStartupTimeMillis = 10; diff --git a/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc b/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc index 125dd99f..9ccd6221 100644 --- a/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc +++ b/lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc @@ -345,6 +345,11 @@ class Symbolizer { } bool InitializeExternalSymbolizer(const char *path_to_symbolizer) { + if (!path_to_symbolizer || path_to_symbolizer[0] == '\0') { + path_to_symbolizer = FindPathToBinary("llvm-symbolizer"); + if (!path_to_symbolizer) + return false; + } int input_fd, output_fd; if (!StartSymbolizerSubprocess(path_to_symbolizer, &input_fd, &output_fd)) return false; |