16a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines//===-- tsan_stack_trace.h --------------------------------------*- C++ -*-===// 26a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// 36a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// The LLVM Compiler Infrastructure 46a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// 56a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// This file is distributed under the University of Illinois Open Source 66a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// License. See LICENSE.TXT for details. 76a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// 86a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines//===----------------------------------------------------------------------===// 96a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// 106a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// This file is a part of ThreadSanitizer (TSan), a race detector. 116a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// 126a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines//===----------------------------------------------------------------------===// 136a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#ifndef TSAN_STACK_TRACE_H 146a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#define TSAN_STACK_TRACE_H 156a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines 166d1862363c88c183b0ed7740fca876342cf0474bStephen Hines#include "sanitizer_common/sanitizer_stacktrace.h" 176a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#include "tsan_defs.h" 186a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines 196a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hinesnamespace __tsan { 206a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines 216d1862363c88c183b0ed7740fca876342cf0474bStephen Hines// StackTrace which calls malloc/free to allocate the buffer for 226d1862363c88c183b0ed7740fca876342cf0474bStephen Hines// addresses in stack traces. 236d1862363c88c183b0ed7740fca876342cf0474bStephen Hinesstruct VarSizeStackTrace : public StackTrace { 246d1862363c88c183b0ed7740fca876342cf0474bStephen Hines uptr *trace_buffer; // Owned. 256d1862363c88c183b0ed7740fca876342cf0474bStephen Hines 266d1862363c88c183b0ed7740fca876342cf0474bStephen Hines VarSizeStackTrace(); 276d1862363c88c183b0ed7740fca876342cf0474bStephen Hines ~VarSizeStackTrace(); 286d1862363c88c183b0ed7740fca876342cf0474bStephen Hines void Init(const uptr *pcs, uptr cnt, uptr extra_top_pc = 0); 296a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines 306a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines private: 316d1862363c88c183b0ed7740fca876342cf0474bStephen Hines void ResizeBuffer(uptr new_size); 326a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines 336d1862363c88c183b0ed7740fca876342cf0474bStephen Hines VarSizeStackTrace(const VarSizeStackTrace &); 346d1862363c88c183b0ed7740fca876342cf0474bStephen Hines void operator=(const VarSizeStackTrace &); 356a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines}; 366a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines 376a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines} // namespace __tsan 386a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines 396a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines#endif // TSAN_STACK_TRACE_H 40