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