15d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines//===-- tsan_stack_trace.h --------------------------------------*- C++ -*-===// 25d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// 35d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// The LLVM Compiler Infrastructure 45d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// 55d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// This file is distributed under the University of Illinois Open Source 65d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// License. See LICENSE.TXT for details. 75d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// 85d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines//===----------------------------------------------------------------------===// 95d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// 105d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// This file is a part of ThreadSanitizer (TSan), a race detector. 115d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines// 125d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines//===----------------------------------------------------------------------===// 135d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#ifndef TSAN_STACK_TRACE_H 145d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#define TSAN_STACK_TRACE_H 155d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 165d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines//#include "sanitizer_common/sanitizer_atomic.h" 175d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines//#include "sanitizer_common/sanitizer_common.h" 185d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines//#include "sanitizer_common/sanitizer_deadlock_detector_interface.h" 195d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#include "tsan_defs.h" 205d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines//#include "tsan_clock.h" 215d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines//#include "tsan_mutex.h" 225d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines//#include "tsan_dense_alloc.h" 235d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 245d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hinesnamespace __tsan { 255d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 265d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hinesclass StackTrace { 275d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines public: 285d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines StackTrace(); 295d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines // Initialized the object in "static mode", 305d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines // in this mode it never calls malloc/free but uses the provided buffer. 315d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines StackTrace(uptr *buf, uptr cnt); 325d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines ~StackTrace(); 335d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines void Reset(); 345d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 355d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines void Init(const uptr *pcs, uptr cnt); 365d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines void ObtainCurrent(ThreadState *thr, uptr toppc); 375d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines bool IsEmpty() const; 385d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines uptr Size() const; 395d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines uptr Get(uptr i) const; 405d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines const uptr *Begin() const; 415d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines void CopyFrom(const StackTrace& other); 425d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 435d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines private: 445d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines uptr n_; 455d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines uptr *s_; 465d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines const uptr c_; 475d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 485d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines StackTrace(const StackTrace&); 495d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines void operator = (const StackTrace&); 505d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines}; 515d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 525d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines} // namespace __tsan 535d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines 545d71de26cedae3dafc17449fe0182045c0bd20e8Stephen Hines#endif // TSAN_STACK_TRACE_H 55