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