Add boolean to PrintStackTraceOnErrorSignal to disable crash reporting.
authorPete Cooper <peter_cooper@apple.com>
Tue, 7 Apr 2015 20:43:23 +0000 (20:43 +0000)
committerPete Cooper <peter_cooper@apple.com>
Tue, 7 Apr 2015 20:43:23 +0000 (20:43 +0000)
The current crash reporting on Mac OS is only disabled via an environment variable.
This adds a boolean (default false) which can also disable crash reporting.

The only client right now is the unittests which don't ever want crash reporting, but do want to detect killed programs.

Reduces the time to run the APFloat unittests on my machine from

[----------] 47 tests from APFloatTest (51250 ms total)

to

[----------] 47 tests from APFloatTest (765 ms total)

Reviewed by Reid Kleckner and Justin Bogner

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

include/llvm/Support/Signals.h
lib/Support/Unix/Signals.inc
lib/Support/Windows/Signals.inc
utils/unittest/UnitTestMain/TestMain.cpp

index a067b136550a705a93e9b64a640ccb7adf643cd4..7e165d7f3a4287bac093cfb0c4964288ae24a64b 100644 (file)
@@ -39,7 +39,7 @@ namespace sys {
   /// When an error signal (such as SIBABRT or SIGSEGV) is delivered to the
   /// process, print a stack trace and then exit.
   /// @brief Print a stack trace if a fatal signal occurs.
-  void PrintStackTraceOnErrorSignal();
+  void PrintStackTraceOnErrorSignal(bool DisableCrashReporting = false);
 
   /// Disable all system dialog boxes that appear when the process crashes.
   void DisableSystemDialogsOnCrash();
index a9b48e0b059b4db0742747f931cc3fd18bddb15f..057bcab16002d7d8ad3564b8860dd45396c9eca7 100644 (file)
@@ -486,12 +486,12 @@ void llvm::sys::DisableSystemDialogsOnCrash() {}
 
 /// PrintStackTraceOnErrorSignal - When an error signal (such as SIGABRT or
 /// SIGSEGV) is delivered to the process, print a stack trace and then exit.
-void llvm::sys::PrintStackTraceOnErrorSignal() {
+void llvm::sys::PrintStackTraceOnErrorSignal(bool DisableCrashReporting) {
   AddSignalHandler(PrintStackTraceSignalHandler, nullptr);
 
 #if defined(__APPLE__) && defined(ENABLE_CRASH_OVERRIDES)
   // Environment variable to disable any kind of crash dialog.
-  if (getenv("LLVM_DISABLE_CRASH_REPORT")) {
+  if (DisableCrashReporting || getenv("LLVM_DISABLE_CRASH_REPORT")) {
     mach_port_t self = mach_task_self();
 
     exception_mask_t mask = EXC_MASK_CRASH;
index de6bf1c9583a0bf1c04ffb452067c79db3f55f0c..f070111a0e7ee5e06f957885dd87c393f1f59fbe 100644 (file)
@@ -389,7 +389,7 @@ void sys::DisableSystemDialogsOnCrash() {
 
 /// 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() {
+void sys::PrintStackTraceOnErrorSignal(bool DisableCrashReporting) {
   DisableSystemDialogsOnCrash();
   RegisterHandler();
   LeaveCriticalSection(&CriticalSection);
index 5387512e6fb54546aba2c82c0e000d344fc9714b..f5b09a5cf67358a39f8a9329d2aa4fa5f64ae2bb 100644 (file)
@@ -23,7 +23,7 @@
 const char *TestMainArgv0;
 
 int main(int argc, char **argv) {
-  llvm::sys::PrintStackTraceOnErrorSignal();
+  llvm::sys::PrintStackTraceOnErrorSignal(true /* Disable crash reporting */);
   testing::InitGoogleTest(&argc, argv);
   llvm::cl::ParseCommandLineOptions(argc, argv);