tsan: do not call malloc/free in memory access handling routine.
This improves signal-/fork-safety of instrumented programs.

llvm-svn: 158988
diff --git a/compiler-rt/lib/tsan/rtl/tsan_sync.h b/compiler-rt/lib/tsan/rtl/tsan_sync.h
index 516e46b..51989d2 100644
--- a/compiler-rt/lib/tsan/rtl/tsan_sync.h
+++ b/compiler-rt/lib/tsan/rtl/tsan_sync.h
@@ -25,6 +25,9 @@
 class StackTrace {
  public:
   StackTrace();
+  // Initialized the object in "static mode",
+  // in this mode it never calls malloc/free but uses the provided buffer.
+  StackTrace(uptr *buf, uptr cnt);
   ~StackTrace();
   void Reset();
 
@@ -39,6 +42,7 @@
  private:
   uptr n_;
   uptr *s_;
+  const uptr c_;
 
   StackTrace(const StackTrace&);
   void operator = (const StackTrace&);