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