From 6322e036aa7ef1bf97b10708765a80d661fff672 Mon Sep 17 00:00:00 2001 From: Alexey Samsonov Date: Wed, 25 Dec 2013 07:09:44 +0000 Subject: [PATCH] [Sanitizer] Replace Symbolizer::IsAvailable and Symbolizer::IsExternalAvailable with Symbolizer::CanReturnFileLineInfo. Remove now redundant checks in symbolizer initialization in TSan and MSan. llvm-svn: 198000 --- compiler-rt/lib/msan/msan.cc | 7 +------ compiler-rt/lib/sanitizer_common/sanitizer_common.cc | 2 +- .../lib/sanitizer_common/sanitizer_symbolizer.h | 5 +---- .../sanitizer_symbolizer_posix_libcdep.cc | 6 +----- .../lib/sanitizer_common/sanitizer_symbolizer_win.cc | 2 +- compiler-rt/lib/tsan/rtl/tsan_rtl.cc | 11 +---------- compiler-rt/lib/tsan/rtl/tsan_symbolize.cc | 6 +----- 7 files changed, 7 insertions(+), 32 deletions(-) diff --git a/compiler-rt/lib/msan/msan.cc b/compiler-rt/lib/msan/msan.cc index a1a37b6a1d90..46f37cb660f4 100644 --- a/compiler-rt/lib/msan/msan.cc +++ b/compiler-rt/lib/msan/msan.cc @@ -300,12 +300,7 @@ void __msan_init() { Die(); } - const char *external_symbolizer = common_flags()->external_symbolizer_path; - bool external_symbolizer_started = - Symbolizer::Init(external_symbolizer)->IsExternalAvailable(); - if (external_symbolizer && external_symbolizer[0]) { - CHECK(external_symbolizer_started); - } + Symbolizer::Init(common_flags()->external_symbolizer_path); Symbolizer::Get()->AddHooks(EnterSymbolizer, ExitSymbolizer); GetThreadStackAndTls(/* main */ true, &msan_stack_bounds.stack_addr, diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common.cc b/compiler-rt/lib/sanitizer_common/sanitizer_common.cc index 77ffda34acf6..5e68c95b7475 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common.cc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common.cc @@ -202,7 +202,7 @@ void ReportErrorSummary(const char *error_type, StackTrace *stack) { return; AddressInfo ai; #if !SANITIZER_GO - if (stack->size > 0 && Symbolizer::Get()->IsAvailable()) { + if (stack->size > 0 && Symbolizer::Get()->CanReturnFileLineInfo()) { // Currently, we include the first stack frame into the report summary. // Maybe sometimes we need to choose another frame (e.g. skip memcpy/etc). uptr pc = StackTrace::GetPreviousInstructionPc(stack->trace[0]); diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.h b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.h index 776cdebb652d..5edc30b58b11 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer.h @@ -95,10 +95,7 @@ class Symbolizer { virtual bool SymbolizeData(uptr address, DataInfo *info) { return false; } - virtual bool IsAvailable() { - return false; - } - virtual bool IsExternalAvailable() { + virtual bool CanReturnFileLineInfo() { return false; } // Release internal caches (if any). diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc index f2840f65ea32..0190e2da3f51 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cc @@ -473,14 +473,10 @@ class POSIXSymbolizer : public Symbolizer { return true; } - bool IsAvailable() { + bool CanReturnFileLineInfo() { return internal_symbolizer_ != 0 || external_symbolizer_ != 0; } - bool IsExternalAvailable() { - return external_symbolizer_ != 0; - } - void Flush() { BlockingMutexLock l(&mu_); if (internal_symbolizer_ != 0) { diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_win.cc b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_win.cc index 0a5f9f2a0490..3a175ceb5428 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_win.cc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_symbolizer_win.cc @@ -74,7 +74,7 @@ class WinSymbolizer : public Symbolizer { return 1; } - bool IsAvailable() { + bool CanReturnFileLineInfo() { return true; } diff --git a/compiler-rt/lib/tsan/rtl/tsan_rtl.cc b/compiler-rt/lib/tsan/rtl/tsan_rtl.cc index 5a7a57efcd96..aaab64fc86a2 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_rtl.cc +++ b/compiler-rt/lib/tsan/rtl/tsan_rtl.cc @@ -241,16 +241,7 @@ void Initialize(ThreadState *thr) { InitializeSuppressions(); #ifndef TSAN_GO InitializeLibIgnore(); - // Initialize external symbolizer before internal threads are started. - const char *external_symbolizer = flags()->external_symbolizer_path; - bool external_symbolizer_started = - Symbolizer::Init(external_symbolizer)->IsExternalAvailable(); - if (external_symbolizer != 0 && external_symbolizer[0] != '\0' && - !external_symbolizer_started) { - Printf("Failed to start external symbolizer: '%s'\n", - external_symbolizer); - Die(); - } + Symbolizer::Init(common_flags()->external_symbolizer_path); Symbolizer::Get()->AddHooks(EnterSymbolizer, ExitSymbolizer); #endif internal_start_thread(&BackgroundThread, 0); diff --git a/compiler-rt/lib/tsan/rtl/tsan_symbolize.cc b/compiler-rt/lib/tsan/rtl/tsan_symbolize.cc index 97163da6bdbf..a2fd7a182c8f 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_symbolize.cc +++ b/compiler-rt/lib/tsan/rtl/tsan_symbolize.cc @@ -105,7 +105,7 @@ ReportStack *SymbolizeCode(uptr addr) { ent->col = col; return ent; } - if (!Symbolizer::Get()->IsAvailable()) + if (!Symbolizer::Get()->CanReturnFileLineInfo()) return SymbolizeCodeAddr2Line(addr); static const uptr kMaxAddrFrames = 16; InternalScopedBuffer addr_frames(kMaxAddrFrames); @@ -131,8 +131,6 @@ ReportStack *SymbolizeCode(uptr addr) { } ReportLocation *SymbolizeData(uptr addr) { - if (!Symbolizer::Get()->IsAvailable()) - return 0; DataInfo info; if (!Symbolizer::Get()->SymbolizeData(addr, &info)) return 0; @@ -150,8 +148,6 @@ ReportLocation *SymbolizeData(uptr addr) { } void SymbolizeFlush() { - if (!Symbolizer::Get()->IsAvailable()) - return; Symbolizer::Get()->Flush(); }