summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Samsonov <samsonov@google.com>2013-09-03 13:22:51 +0000
committerAlexey Samsonov <samsonov@google.com>2013-09-03 13:22:51 +0000
commit68c016aea0b61f649b9d9ba65c7d7217e0c0f6cb (patch)
treeb0926cc43f6e73470de5979587ebe2da942f088f
parent1dcd1d9d1c86ab9b728386d261fbebe00b32e097 (diff)
downloadcompiler-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.cc6
-rw-r--r--lib/asan/lit_tests/lit.cfg3
-rw-r--r--lib/lsan/lit_tests/AsanConfig/lit.cfg1
-rw-r--r--lib/lsan/lit_tests/LsanConfig/lit.cfg2
-rw-r--r--lib/lsan/lsan.cc9
-rw-r--r--lib/msan/lit_tests/lit.cfg3
-rw-r--r--lib/msan/msan.cc3
-rw-r--r--lib/sanitizer_common/sanitizer_symbolizer.h3
-rw-r--r--lib/sanitizer_common/sanitizer_symbolizer_libcdep.cc5
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;