[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