[llvm-commits] [llvm] r66145 - /llvm/trunk/lib/Support/PrettyStackTrace.cpp

Chris Lattner sabre at nondot.org
Wed Mar 4 23:03:49 PST 2009


Author: lattner
Date: Thu Mar  5 01:03:49 2009
New Revision: 66145

URL: http://llvm.org/viewvc/llvm-project?rev=66145&view=rev
Log:
Daniel wanted the stack printed upside down.  Perhaps he
feels a kinship to machine stacks that grow down.  Now we get
stuff like this:

Stack dump:
0.	Program arguments: clang clang_crash_Iw2Osj.mi 
1.	/Developer/SDKs/MacOSX10.5.sdk/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/xmmintrin.h:624:1: parsing function body '_mm_cvtpi16_ps'
2.	/Developer/SDKs/MacOSX10.5.sdk/usr/lib/gcc/i686-apple-darwin9/4.0.1/include/xmmintrin.h:624:1: in compound statement ('{}')
Abort


Modified:
    llvm/trunk/lib/Support/PrettyStackTrace.cpp

Modified: llvm/trunk/lib/Support/PrettyStackTrace.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/PrettyStackTrace.cpp?rev=66145&r1=66144&r2=66145&view=diff

==============================================================================
--- llvm/trunk/lib/Support/PrettyStackTrace.cpp (original)
+++ llvm/trunk/lib/Support/PrettyStackTrace.cpp Thu Mar  5 01:03:49 2009
@@ -20,19 +20,27 @@
 // FIXME: This should be thread local when llvm supports threads.
 static const PrettyStackTraceEntry *PrettyStackTraceHead = 0;
 
+static unsigned PrintStack(const PrettyStackTraceEntry *Entry, raw_ostream &OS){
+  unsigned NextID = 0;
+  if (Entry->getNextEntry())
+    NextID = PrintStack(Entry->getNextEntry(), OS);
+  OS << NextID << ".\t";
+  Entry->print(OS);
+  
+  return NextID+1;
+}
+
 /// CrashHandler - This callback is run if a fatal signal is delivered to the
 /// process, it prints the pretty stack trace.
 static void CrashHandler(void *Cookie) {
+  // Don't print an empty trace.
+  if (PrettyStackTraceHead == 0) return;
+  
   // If there are pretty stack frames registered, walk and emit them.
   raw_ostream &OS = errs();
   OS << "Stack dump:\n";
   
-  unsigned i = 0;
-  for (const PrettyStackTraceEntry *Entry = PrettyStackTraceHead; Entry;
-       Entry = Entry->getNextEntry(), ++i) {
-    OS << i << ".\t";
-    Entry->print(OS);
-  }
+  PrintStack(PrettyStackTraceHead, OS);
   OS.flush();
 }
 





More information about the llvm-commits mailing list