mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 19:23:23 +01:00
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
This commit is contained in:
parent
982c3491ff
commit
c4f40d1f53
@ -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();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user