sanitizer_symbolizer_libcdep.cc revision e00495aa0f3b114c7b764769d9450e5d2efb8e64
11d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com//===-- sanitizer_symbolizer_libcdep.cc -----------------------------------===// 21d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com// 31d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com// The LLVM Compiler Infrastructure 41d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com// 51d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com// This file is distributed under the University of Illinois Open Source 61d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com// License. See LICENSE.TXT for details. 71d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com// 81d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com//===----------------------------------------------------------------------===// 91d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com// 101d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com// This file is shared between AddressSanitizer and ThreadSanitizer 111d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com// run-time libraries. 121d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com//===----------------------------------------------------------------------===// 131d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com 141d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com#include "sanitizer_internal_defs.h" 151d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com#include "sanitizer_symbolizer.h" 161d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com 171d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.comnamespace __sanitizer { 181d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com 19410e6e80f00a6c660675c80904807a041c7b7d2amtklein@google.comSymbolizer *Symbolizer::CreateAndStore(const char *path_to_external) { 201d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com Symbolizer *platform_symbolizer = PlatformInit(path_to_external); 211d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com if (!platform_symbolizer) 221d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com return Disable(); 231d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com symbolizer_ = platform_symbolizer; 241d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com return platform_symbolizer; 251d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com} 261d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com 273361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.orgSymbolizer *Symbolizer::Init(const char *path_to_external) { 28e0e7cfe44bb9d66d76120a79e5275c294bacaa22commit-bot@chromium.org CHECK_EQ(0, symbolizer_); 291d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com return CreateAndStore(path_to_external); 303361471a3504ecd0351ff70f4c42d8d6fee963d4commit-bot@chromium.org} 31b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.com 32b7061176c7f414616fe2e79e832b3e0abe326af6robertphillips@google.comSymbolizer *Symbolizer::GetOrInit() { 331d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com SpinMutexLock l(&init_mu_); 341d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com if (symbolizer_ == 0) 351d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com return CreateAndStore(0); 361d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com return symbolizer_; 371d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com} 381d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com 391d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com} // namespace __sanitizer 401d2f63159416ceec0544f803aef80f6e0c09e85crobertphillips@google.com