1*a7c257b0Skamil //===-- asan_stack.cc -----------------------------------------------------===// 2*a7c257b0Skamil // 3*a7c257b0Skamil // The LLVM Compiler Infrastructure 4*a7c257b0Skamil // 5*a7c257b0Skamil // This file is distributed under the University of Illinois Open Source 6*a7c257b0Skamil // License. See LICENSE.TXT for details. 7*a7c257b0Skamil // 8*a7c257b0Skamil //===----------------------------------------------------------------------===// 9*a7c257b0Skamil // 10*a7c257b0Skamil // This file is a part of AddressSanitizer, an address sanity checker. 11*a7c257b0Skamil // 12*a7c257b0Skamil // Code for ASan stack trace. 13*a7c257b0Skamil //===----------------------------------------------------------------------===// 14*a7c257b0Skamil #include "asan_internal.h" 15*a7c257b0Skamil #include "asan_stack.h" 16*a7c257b0Skamil #include "sanitizer_common/sanitizer_atomic.h" 17*a7c257b0Skamil 18*a7c257b0Skamil namespace __asan { 19*a7c257b0Skamil 20*a7c257b0Skamil static atomic_uint32_t malloc_context_size; 21*a7c257b0Skamil SetMallocContextSize(u32 size)22*a7c257b0Skamilvoid SetMallocContextSize(u32 size) { 23*a7c257b0Skamil atomic_store(&malloc_context_size, size, memory_order_release); 24*a7c257b0Skamil } 25*a7c257b0Skamil GetMallocContextSize()26*a7c257b0Skamilu32 GetMallocContextSize() { 27*a7c257b0Skamil return atomic_load(&malloc_context_size, memory_order_acquire); 28*a7c257b0Skamil } 29*a7c257b0Skamil 30*a7c257b0Skamil } // namespace __asan 31*a7c257b0Skamil 32*a7c257b0Skamil // ------------------ Interface -------------- {{{1 33*a7c257b0Skamil 34*a7c257b0Skamil extern "C" { 35*a7c257b0Skamil SANITIZER_INTERFACE_ATTRIBUTE __sanitizer_print_stack_trace()36*a7c257b0Skamilvoid __sanitizer_print_stack_trace() { 37*a7c257b0Skamil using namespace __asan; 38*a7c257b0Skamil PRINT_CURRENT_STACK(); 39*a7c257b0Skamil } 40*a7c257b0Skamil } // extern "C" 41