1e5f5895bda30f374b0b51412fd4d837fa59aed66Alexey Samsonov//===-- asan_stack.cc -----------------------------------------------------===// 21e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// 31e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// The LLVM Compiler Infrastructure 41e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// 51e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// This file is distributed under the University of Illinois Open Source 61e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// License. See LICENSE.TXT for details. 71e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// 81e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany//===----------------------------------------------------------------------===// 91e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// 101e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// This file is a part of AddressSanitizer, an address sanity checker. 111e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// 121e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany// Code for ASan stack trace. 131e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany//===----------------------------------------------------------------------===// 14c70fa28caaaec2134f2c2230821fcc0f0d7ac27eAlexey Samsonov#include "asan_internal.h" 151e172b4bdec57329bf904f063a29f99cddf2d85fKostya Serebryany#include "asan_stack.h" 1686277eb844c4983c81de62d7c050e92fe7155788Stephen Hines#include "sanitizer_common/sanitizer_atomic.h" 1786277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 1886277eb844c4983c81de62d7c050e92fe7155788Stephen Hinesnamespace __asan { 1986277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 2086277eb844c4983c81de62d7c050e92fe7155788Stephen Hinesstatic atomic_uint32_t malloc_context_size; 2186277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 2286277eb844c4983c81de62d7c050e92fe7155788Stephen Hinesvoid SetMallocContextSize(u32 size) { 2386277eb844c4983c81de62d7c050e92fe7155788Stephen Hines atomic_store(&malloc_context_size, size, memory_order_release); 2486277eb844c4983c81de62d7c050e92fe7155788Stephen Hines} 2586277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 2686277eb844c4983c81de62d7c050e92fe7155788Stephen Hinesu32 GetMallocContextSize() { 2786277eb844c4983c81de62d7c050e92fe7155788Stephen Hines return atomic_load(&malloc_context_size, memory_order_acquire); 2886277eb844c4983c81de62d7c050e92fe7155788Stephen Hines} 2986277eb844c4983c81de62d7c050e92fe7155788Stephen Hines 3086277eb844c4983c81de62d7c050e92fe7155788Stephen Hines} // namespace __asan 31c93d3e2bdfb1ad9cce26a6e8d66764ed97a6d6b4Alexey Samsonov 32c93d3e2bdfb1ad9cce26a6e8d66764ed97a6d6b4Alexey Samsonov// ------------------ Interface -------------- {{{1 33c93d3e2bdfb1ad9cce26a6e8d66764ed97a6d6b4Alexey Samsonov 342d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesextern "C" { 352d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen HinesSANITIZER_INTERFACE_ATTRIBUTE 362d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hinesvoid __sanitizer_print_stack_trace() { 372d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines using namespace __asan; 382d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines PRINT_CURRENT_STACK(); 39c93d3e2bdfb1ad9cce26a6e8d66764ed97a6d6b4Alexey Samsonov} 402d1fdb26e458c4ddc04155c1d421bced3ba90cd0Stephen Hines} // extern "C" 41