| //===-- sanitizer_symbolizer_libcdep.cc -----------------------------------===// |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file is shared between AddressSanitizer and ThreadSanitizer |
| // run-time libraries. |
| //===----------------------------------------------------------------------===// |
| |
| #include "sanitizer_internal_defs.h" |
| #include "sanitizer_symbolizer.h" |
| |
| namespace __sanitizer { |
| |
| Symbolizer *Symbolizer::CreateAndStore(const char *path_to_external) { |
| Symbolizer *platform_symbolizer = PlatformInit(path_to_external); |
| if (!platform_symbolizer) |
| return Disable(); |
| symbolizer_ = platform_symbolizer; |
| return platform_symbolizer; |
| } |
| |
| Symbolizer *Symbolizer::Init(const char *path_to_external) { |
| CHECK_EQ(0, symbolizer_); |
| return CreateAndStore(path_to_external); |
| } |
| |
| Symbolizer *Symbolizer::GetOrInit() { |
| SpinMutexLock l(&init_mu_); |
| if (symbolizer_ == 0) |
| return CreateAndStore(0); |
| return symbolizer_; |
| } |
| |
| } // namespace __sanitizer |