1//===-- tsan_stack_trace.h --------------------------------------*- C++ -*-===//
2//
3// This file is distributed under the University of Illinois Open Source
4// License. See LICENSE.TXT for details.
5//
6//===----------------------------------------------------------------------===//
7//
8// This file is a part of ThreadSanitizer (TSan), a race detector.
9//
10//===----------------------------------------------------------------------===//
11#ifndef TSAN_STACK_TRACE_H
12#define TSAN_STACK_TRACE_H
13
14#include "sanitizer_common/sanitizer_stacktrace.h"
15#include "tsan_defs.h"
16
17namespace __tsan {
18
19// StackTrace which calls malloc/free to allocate the buffer for
20// addresses in stack traces.
21struct VarSizeStackTrace : public StackTrace {
22  uptr *trace_buffer;  // Owned.
23
24  VarSizeStackTrace();
25  ~VarSizeStackTrace();
26  void Init(const uptr *pcs, uptr cnt, uptr extra_top_pc = 0);
27
28  // Reverses the current stack trace order, the top frame goes to the bottom,
29  // the last frame goes to the top.
30  void ReverseOrder();
31
32 private:
33  void ResizeBuffer(uptr new_size);
34
35  VarSizeStackTrace(const VarSizeStackTrace &);
36  void operator=(const VarSizeStackTrace &);
37};
38
39}  // namespace __tsan
40
41#endif  // TSAN_STACK_TRACE_H
42