Only print the stack trace if it was requested. Previously, any call into
authorReid Spencer <rspencer@reidspencer.com>
Fri, 16 Jun 2006 00:00:57 +0000 (00:00 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Fri, 16 Jun 2006 00:00:57 +0000 (00:00 +0000)
the Signals module that registered the handlers would cause the stack trace
to be generated. Now, you must explicitly call PrintStackTraceOnErrorSignal
in order for that to happen.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@28810 91177308-0d34-0410-b5e6-96231b3b80d8

lib/System/Unix/Signals.inc

index a643dbf972c2f4412f23ca4bd37067885a4dbb6d..4096ad27273b91cdbd86186350f5fbecd5df9447 100644 (file)
@@ -24,6 +24,8 @@
 
 namespace {
 
+bool StackTraceRequested = false; 
+
 /// InterruptFunction - The function to call if ctrl-c is pressed.
 void (*InterruptFunction)() = 0;
 
@@ -132,7 +134,8 @@ RETSIGTYPE SignalHandler(int Sig) {
 
   // Otherwise if it is a fault (like SEGV) output the stacktrace to
   // STDERR (if we can) and reissue the signal to die...
-  PrintStackTrace();
+  if (StackTraceRequested)
+    PrintStackTrace();
   signal(Sig, SIG_DFL);
 }
 
@@ -178,6 +181,7 @@ void sys::RemoveDirectoryOnSignal(const llvm::sys::Path& path) {
 /// PrintStackTraceOnErrorSignal - When an error signal (such as SIBABRT or
 /// SIGSEGV) is delivered to the process, print a stack trace and then exit.
 void sys::PrintStackTraceOnErrorSignal() {
+  StackTraceRequested = true;
   std::for_each(KillSigs, KillSigsEnd, RegisterHandler);
 }