mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +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.
|
// FIXME: This should be thread local when llvm supports threads.
|
||||||
static const PrettyStackTraceEntry *PrettyStackTraceHead = 0;
|
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
|
/// CrashHandler - This callback is run if a fatal signal is delivered to the
|
||||||
/// process, it prints the pretty stack trace.
|
/// process, it prints the pretty stack trace.
|
||||||
static void CrashHandler(void *Cookie) {
|
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.
|
// If there are pretty stack frames registered, walk and emit them.
|
||||||
raw_ostream &OS = errs();
|
raw_ostream &OS = errs();
|
||||||
OS << "Stack dump:\n";
|
OS << "Stack dump:\n";
|
||||||
|
|
||||||
unsigned i = 0;
|
PrintStack(PrettyStackTraceHead, OS);
|
||||||
for (const PrettyStackTraceEntry *Entry = PrettyStackTraceHead; Entry;
|
|
||||||
Entry = Entry->getNextEntry(), ++i) {
|
|
||||||
OS << i << ".\t";
|
|
||||||
Entry->print(OS);
|
|
||||||
}
|
|
||||||
OS.flush();
|
OS.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user