15ef59e75Smrg //===-- tsan_stack_trace.h --------------------------------------*- C++ -*-===//
25ef59e75Smrg //
3*490215a3Smrg // This file is distributed under the University of Illinois Open Source
4*490215a3Smrg // License. See LICENSE.TXT for details.
55ef59e75Smrg //
65ef59e75Smrg //===----------------------------------------------------------------------===//
75ef59e75Smrg //
85ef59e75Smrg // This file is a part of ThreadSanitizer (TSan), a race detector.
95ef59e75Smrg //
105ef59e75Smrg //===----------------------------------------------------------------------===//
115ef59e75Smrg #ifndef TSAN_STACK_TRACE_H
125ef59e75Smrg #define TSAN_STACK_TRACE_H
135ef59e75Smrg 
145ef59e75Smrg #include "sanitizer_common/sanitizer_stacktrace.h"
155ef59e75Smrg #include "tsan_defs.h"
165ef59e75Smrg 
175ef59e75Smrg namespace __tsan {
185ef59e75Smrg 
195ef59e75Smrg // StackTrace which calls malloc/free to allocate the buffer for
205ef59e75Smrg // addresses in stack traces.
215ef59e75Smrg struct VarSizeStackTrace : public StackTrace {
225ef59e75Smrg   uptr *trace_buffer;  // Owned.
235ef59e75Smrg 
245ef59e75Smrg   VarSizeStackTrace();
255ef59e75Smrg   ~VarSizeStackTrace();
265ef59e75Smrg   void Init(const uptr *pcs, uptr cnt, uptr extra_top_pc = 0);
275ef59e75Smrg 
2881418a27Smrg   // Reverses the current stack trace order, the top frame goes to the bottom,
2981418a27Smrg   // the last frame goes to the top.
3081418a27Smrg   void ReverseOrder();
3181418a27Smrg 
325ef59e75Smrg  private:
335ef59e75Smrg   void ResizeBuffer(uptr new_size);
345ef59e75Smrg 
355ef59e75Smrg   VarSizeStackTrace(const VarSizeStackTrace &);
365ef59e75Smrg   void operator=(const VarSizeStackTrace &);
375ef59e75Smrg };
385ef59e75Smrg 
395ef59e75Smrg }  // namespace __tsan
405ef59e75Smrg 
415ef59e75Smrg #endif  // TSAN_STACK_TRACE_H
42