[Sanitizer] Replace Symbolizer::IsAvailable and Symbolizer::IsExternalAvailable with Symbolizer::CanReturnFileLineInfo.

Remove now redundant checks in symbolizer initialization in TSan and MSan.

llvm-svn: 198000
This commit is contained in:
Alexey Samsonov 2013-12-25 07:09:44 +00:00
parent a15ba5b71b
commit 6322e036aa
7 changed files with 7 additions and 32 deletions

View File

@ -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,

View File

@ -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]);

View File

@ -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).

View File

@ -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) {

View File

@ -74,7 +74,7 @@ class WinSymbolizer : public Symbolizer {
return 1;
}
bool IsAvailable() {
bool CanReturnFileLineInfo() {
return true;
}

View File

@ -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);

View File

@ -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<AddressInfo> 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();
}