[compiler-rt] r197037 - [asan] if verbosity>=2, print the fake stack usage stats at thread exit; No functionality change in non-verboze mode

Kostya Serebryany kcc at google.com
Wed Dec 11 05:54:01 PST 2013


Author: kcc
Date: Wed Dec 11 07:54:01 2013
New Revision: 197037

URL: http://llvm.org/viewvc/llvm-project?rev=197037&view=rev
Log:
[asan] if verbosity>=2, print the fake stack usage stats at thread exit; No functionality change in non-verboze mode

Modified:
    compiler-rt/trunk/lib/asan/asan_fake_stack.cc
    compiler-rt/trunk/lib/asan/asan_fake_stack.h
    compiler-rt/trunk/lib/asan/asan_thread.cc
    compiler-rt/trunk/lib/asan/asan_thread.h
    compiler-rt/trunk/lib/asan/tests/asan_fake_stack_test.cc

Modified: compiler-rt/trunk/lib/asan/asan_fake_stack.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_fake_stack.cc?rev=197037&r1=197036&r2=197037&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/asan_fake_stack.cc (original)
+++ compiler-rt/trunk/lib/asan/asan_fake_stack.cc Wed Dec 11 07:54:01 2013
@@ -52,8 +52,15 @@ FakeStack *FakeStack::Create(uptr stack_
   return res;
 }
 
-void FakeStack::Destroy() {
+void FakeStack::Destroy(int tid) {
   PoisonAll(0);
+  if (common_flags()->verbosity >= 2) {
+    InternalScopedString str(kNumberOfSizeClasses * 50);
+    for (uptr class_id = 0; class_id < kNumberOfSizeClasses; class_id++)
+      str.append("%zd: %zd/%zd; ", class_id, hint_position_[class_id],
+                 NumberOfFrames(stack_size_log(), class_id));
+    Report("T%d: FakeStack destroyed: %s\n", tid, str.data());
+  }
   UnmapOrDie(this, RequiredSize(stack_size_log_));
 }
 

Modified: compiler-rt/trunk/lib/asan/asan_fake_stack.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_fake_stack.h?rev=197037&r1=197036&r2=197037&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/asan_fake_stack.h (original)
+++ compiler-rt/trunk/lib/asan/asan_fake_stack.h Wed Dec 11 07:54:01 2013
@@ -65,7 +65,7 @@ class FakeStack {
   // CTOR: create the FakeStack as a single mmap-ed object.
   static FakeStack *Create(uptr stack_size_log);
 
-  void Destroy();
+  void Destroy(int tid);
 
   // stack_size_log is at least 15 (stack_size >= 32K).
   static uptr SizeRequiredForFlags(uptr stack_size_log) {

Modified: compiler-rt/trunk/lib/asan/asan_thread.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_thread.cc?rev=197037&r1=197036&r2=197037&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/asan_thread.cc (original)
+++ compiler-rt/trunk/lib/asan/asan_thread.cc Wed Dec 11 07:54:01 2013
@@ -93,17 +93,18 @@ void AsanThread::TSDDtor(void *tsd) {
 }
 
 void AsanThread::Destroy() {
-  VReport(1, "T%d exited\n", tid());
+  int tid = this->tid();
+  VReport(1, "T%d exited\n", tid);
 
   malloc_storage().CommitBack();
   if (flags()->use_sigaltstack) UnsetAlternateSignalStack();
-  asanThreadRegistry().FinishThread(tid());
+  asanThreadRegistry().FinishThread(tid);
   FlushToDeadThreadStats(&stats_);
   // We also clear the shadow on thread destruction because
   // some code may still be executing in later TSD destructors
   // and we don't want it to have any poisoned stack.
   ClearShadowForThreadStackAndTLS();
-  DeleteFakeStack();
+  DeleteFakeStack(tid);
   uptr size = RoundUpTo(sizeof(AsanThread), GetPageSizeCached());
   UnmapOrDie(this, size);
 }

Modified: compiler-rt/trunk/lib/asan/asan_thread.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_thread.h?rev=197037&r1=197036&r2=197037&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/asan_thread.h (original)
+++ compiler-rt/trunk/lib/asan/asan_thread.h Wed Dec 11 07:54:01 2013
@@ -78,12 +78,12 @@ class AsanThread {
     return addr >= stack_bottom_ && addr < stack_top_;
   }
 
-  void DeleteFakeStack() {
+  void DeleteFakeStack(int tid) {
     if (!fake_stack_) return;
     FakeStack *t = fake_stack_;
     fake_stack_ = 0;
     SetTLSFakeStack(0);
-    t->Destroy();
+    t->Destroy(tid);
   }
 
   bool has_fake_stack() {

Modified: compiler-rt/trunk/lib/asan/tests/asan_fake_stack_test.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/tests/asan_fake_stack_test.cc?rev=197037&r1=197036&r2=197037&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/tests/asan_fake_stack_test.cc (original)
+++ compiler-rt/trunk/lib/asan/tests/asan_fake_stack_test.cc Wed Dec 11 07:54:01 2013
@@ -63,7 +63,7 @@ TEST(FakeStack, CreateDestroy) {
   for (int i = 0; i < 1000; i++) {
     for (uptr stack_size_log = 20; stack_size_log <= 22; stack_size_log++) {
       FakeStack *fake_stack = FakeStack::Create(stack_size_log);
-      fake_stack->Destroy();
+      fake_stack->Destroy(0);
     }
   }
 }
@@ -98,7 +98,7 @@ TEST(FakeStack, GetFrame) {
   EXPECT_EQ(base + 0*stack_size + 64 * 7, fs->GetFrame(stack_size_log, 0, 7U));
   EXPECT_EQ(base + 1*stack_size + 128 * 3, fs->GetFrame(stack_size_log, 1, 3U));
   EXPECT_EQ(base + 2*stack_size + 256 * 5, fs->GetFrame(stack_size_log, 2, 5U));
-  fs->Destroy();
+  fs->Destroy(0);
 }
 
 TEST(FakeStack, Allocate) {
@@ -127,7 +127,7 @@ TEST(FakeStack, Allocate) {
       fs->Deallocate(reinterpret_cast<uptr>(it->first), it->second);
     }
   }
-  fs->Destroy();
+  fs->Destroy(0);
 }
 
 static void RecursiveFunction(FakeStack *fs, int depth) {
@@ -144,7 +144,7 @@ TEST(FakeStack, RecursiveStressTest) {
   const uptr stack_size_log = 16;
   FakeStack *fs = FakeStack::Create(stack_size_log);
   RecursiveFunction(fs, 22);  // with 26 runs for 2-3 seconds.
-  fs->Destroy();
+  fs->Destroy(0);
 }
 
 }  // namespace __asan





More information about the llvm-commits mailing list