summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Support/PrettyStackTrace.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-03-05 07:03:49 +0000
committerChris Lattner <sabre@nondot.org>2009-03-05 07:03:49 +0000
commit8d0fe8cd9097330780d3d68db6088d6ddd21e370 (patch)
tree3b7f6aa9eb2ebec3c40dde4ebf6ced371d5e7410 /llvm/lib/Support/PrettyStackTrace.cpp
parent2674eb4bd16d830fc9a3f3e59bc99987f9dd77e3 (diff)
downloadbcm5719-llvm-8d0fe8cd9097330780d3d68db6088d6ddd21e370.tar.gz
bcm5719-llvm-8d0fe8cd9097330780d3d68db6088d6ddd21e370.zip
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 llvm-svn: 66145
Diffstat (limited to 'llvm/lib/Support/PrettyStackTrace.cpp')
-rw-r--r--llvm/lib/Support/PrettyStackTrace.cpp20
1 files changed, 14 insertions, 6 deletions
diff --git a/llvm/lib/Support/PrettyStackTrace.cpp b/llvm/lib/Support/PrettyStackTrace.cpp
index 0a514045855..1462ef0eb81 100644
--- a/llvm/lib/Support/PrettyStackTrace.cpp
+++ b/llvm/lib/Support/PrettyStackTrace.cpp
@@ -20,19 +20,27 @@ using namespace llvm;
// 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();
}
OpenPOWER on IntegriCloud