diff --git a/llvm/include/llvm-c/Core.h b/llvm/include/llvm-c/Core.h index 88204ef33ce2..e18c77c5d725 100644 --- a/llvm/include/llvm-c/Core.h +++ b/llvm/include/llvm-c/Core.h @@ -434,13 +434,11 @@ void LLVMInstallFatalErrorHandler(LLVMFatalErrorHandler Handler); void LLVMResetFatalErrorHandler(void); /** - * Disable LLVM's built-in stack trace code. This must be called before any - * other LLVM APIs; otherwise the results are undefined. - * - * FIXME: This API should be replaced by a LLVMEnablePrettyStackTrace() - * function; the default should be that pretty stack traces are disabled. + * Enable LLVM's built-in stack trace code. This intercepts the OS's crash + * signals and prints which component of LLVM you were in at the time if the + * crash. */ -void LLVMDisablePrettyStackTrace(void); +void LLVMEnablePrettyStackTrace(void); /** * @defgroup LLVMCCoreContext Contexts diff --git a/llvm/include/llvm/Support/PrettyStackTrace.h b/llvm/include/llvm/Support/PrettyStackTrace.h index 2122e06d53fe..4f68fca24f38 100644 --- a/llvm/include/llvm/Support/PrettyStackTrace.h +++ b/llvm/include/llvm/Support/PrettyStackTrace.h @@ -21,11 +21,7 @@ namespace llvm { class raw_ostream; - /// DisablePrettyStackTrace - Set this to true to disable this module. This - /// might be necessary if the host application installs its own signal - /// handlers which conflict with the ones installed by this module. - /// Defaults to false. - extern bool DisablePrettyStackTrace; + void EnablePrettyStackTrace(); /// PrettyStackTraceEntry - This class is used to represent a frame of the /// "pretty" stack trace that is dumped when a program crashes. You can define @@ -64,7 +60,9 @@ namespace llvm { const char *const *ArgV; public: PrettyStackTraceProgram(int argc, const char * const*argv) - : ArgC(argc), ArgV(argv) {} + : ArgC(argc), ArgV(argv) { + EnablePrettyStackTrace(); + } virtual void print(raw_ostream &OS) const LLVM_OVERRIDE; }; diff --git a/llvm/lib/Support/PrettyStackTrace.cpp b/llvm/lib/Support/PrettyStackTrace.cpp index d08abc8ce155..722f4ca81b6c 100644 --- a/llvm/lib/Support/PrettyStackTrace.cpp +++ b/llvm/lib/Support/PrettyStackTrace.cpp @@ -28,10 +28,6 @@ using namespace llvm; -namespace llvm { - bool DisablePrettyStackTrace = false; -} - static ManagedStatic > PrettyStackTraceHead; static unsigned PrintStack(const PrettyStackTraceEntry *Entry, raw_ostream &OS){ @@ -103,17 +99,7 @@ static void CrashHandler(void *) { #endif } -static bool RegisterCrashPrinter() { - if (!DisablePrettyStackTrace) - sys::AddSignalHandler(CrashHandler, 0); - return false; -} - PrettyStackTraceEntry::PrettyStackTraceEntry() { - // The first time this is called, we register the crash printer. - static bool HandlerRegistered = RegisterCrashPrinter(); - (void)HandlerRegistered; - // Link ourselves. NextEntry = PrettyStackTraceHead->get(); PrettyStackTraceHead->set(this); @@ -149,6 +135,17 @@ void PrettyStackTraceProgram::print(raw_ostream &OS) const { OS << '\n'; } -void LLVMDisablePrettyStackTrace() { - DisablePrettyStackTrace = true; +static bool RegisterCrashPrinter() { + sys::AddSignalHandler(CrashHandler, 0); + return false; +} + +void llvm::EnablePrettyStackTrace() { + // The first time this is called, we register the crash printer. + static bool HandlerRegistered = RegisterCrashPrinter(); + (void)HandlerRegistered; +} + +void LLVMEnablePrettyStackTrace() { + EnablePrettyStackTrace(); }