sanitizer_symbolizer.cc revision f456018a324dc48668a57060f5ac9c838dfd9f32
1//===-- sanitizer_symbolizer.cc -------------------------------------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This file is shared between AddressSanitizer and ThreadSanitizer 11// run-time libraries. 12//===----------------------------------------------------------------------===// 13 14#include "sanitizer_platform.h" 15#include "sanitizer_internal_defs.h" 16#include "sanitizer_placement_new.h" 17#include "sanitizer_symbolizer.h" 18 19namespace __sanitizer { 20 21atomic_uintptr_t Symbolizer::symbolizer_; 22LowLevelAllocator Symbolizer::symbolizer_allocator_; 23 24Symbolizer *Symbolizer::GetOrNull() { 25 return reinterpret_cast<Symbolizer *>( 26 atomic_load(&symbolizer_, memory_order_acquire)); 27} 28 29Symbolizer *Symbolizer::Get() { 30 Symbolizer *sym = GetOrNull(); 31 CHECK(sym); 32 return sym; 33} 34 35Symbolizer *Symbolizer::Disable() { 36 CHECK_EQ(0, atomic_load(&symbolizer_, memory_order_acquire)); 37 Symbolizer *dummy_sym = new(symbolizer_allocator_) Symbolizer; 38 atomic_store(&symbolizer_, reinterpret_cast<uptr>(dummy_sym), 39 memory_order_release); 40 return dummy_sym; 41} 42 43} // namespace __sanitizer 44