mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-19 02:52:53 +02:00
Make the pretty stack trace be an opt-in, rather than opt-out, facility. Enable pretty
stack traces by default if you use PrettyStackTraceProgram, so that existing LLVM-based tools will continue to get it without any changes. llvm-svn: 193971
This commit is contained in:
parent
4b13ee5f62
commit
0080a77e7a
@ -434,13 +434,11 @@ void LLVMInstallFatalErrorHandler(LLVMFatalErrorHandler Handler);
|
|||||||
void LLVMResetFatalErrorHandler(void);
|
void LLVMResetFatalErrorHandler(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Disable LLVM's built-in stack trace code. This must be called before any
|
* Enable LLVM's built-in stack trace code. This intercepts the OS's crash
|
||||||
* other LLVM APIs; otherwise the results are undefined.
|
* signals and prints which component of LLVM you were in at the time if the
|
||||||
*
|
* crash.
|
||||||
* FIXME: This API should be replaced by a LLVMEnablePrettyStackTrace()
|
|
||||||
* function; the default should be that pretty stack traces are disabled.
|
|
||||||
*/
|
*/
|
||||||
void LLVMDisablePrettyStackTrace(void);
|
void LLVMEnablePrettyStackTrace(void);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @defgroup LLVMCCoreContext Contexts
|
* @defgroup LLVMCCoreContext Contexts
|
||||||
|
@ -21,11 +21,7 @@
|
|||||||
namespace llvm {
|
namespace llvm {
|
||||||
class raw_ostream;
|
class raw_ostream;
|
||||||
|
|
||||||
/// DisablePrettyStackTrace - Set this to true to disable this module. This
|
void EnablePrettyStackTrace();
|
||||||
/// 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;
|
|
||||||
|
|
||||||
/// PrettyStackTraceEntry - This class is used to represent a frame of the
|
/// PrettyStackTraceEntry - This class is used to represent a frame of the
|
||||||
/// "pretty" stack trace that is dumped when a program crashes. You can define
|
/// "pretty" stack trace that is dumped when a program crashes. You can define
|
||||||
@ -64,7 +60,9 @@ namespace llvm {
|
|||||||
const char *const *ArgV;
|
const char *const *ArgV;
|
||||||
public:
|
public:
|
||||||
PrettyStackTraceProgram(int argc, const char * const*argv)
|
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;
|
virtual void print(raw_ostream &OS) const LLVM_OVERRIDE;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -28,10 +28,6 @@
|
|||||||
|
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
namespace llvm {
|
|
||||||
bool DisablePrettyStackTrace = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
static ManagedStatic<sys::ThreadLocal<const PrettyStackTraceEntry> > PrettyStackTraceHead;
|
static ManagedStatic<sys::ThreadLocal<const PrettyStackTraceEntry> > PrettyStackTraceHead;
|
||||||
|
|
||||||
static unsigned PrintStack(const PrettyStackTraceEntry *Entry, raw_ostream &OS){
|
static unsigned PrintStack(const PrettyStackTraceEntry *Entry, raw_ostream &OS){
|
||||||
@ -103,17 +99,7 @@ static void CrashHandler(void *) {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool RegisterCrashPrinter() {
|
|
||||||
if (!DisablePrettyStackTrace)
|
|
||||||
sys::AddSignalHandler(CrashHandler, 0);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
PrettyStackTraceEntry::PrettyStackTraceEntry() {
|
PrettyStackTraceEntry::PrettyStackTraceEntry() {
|
||||||
// The first time this is called, we register the crash printer.
|
|
||||||
static bool HandlerRegistered = RegisterCrashPrinter();
|
|
||||||
(void)HandlerRegistered;
|
|
||||||
|
|
||||||
// Link ourselves.
|
// Link ourselves.
|
||||||
NextEntry = PrettyStackTraceHead->get();
|
NextEntry = PrettyStackTraceHead->get();
|
||||||
PrettyStackTraceHead->set(this);
|
PrettyStackTraceHead->set(this);
|
||||||
@ -149,6 +135,17 @@ void PrettyStackTraceProgram::print(raw_ostream &OS) const {
|
|||||||
OS << '\n';
|
OS << '\n';
|
||||||
}
|
}
|
||||||
|
|
||||||
void LLVMDisablePrettyStackTrace() {
|
static bool RegisterCrashPrinter() {
|
||||||
DisablePrettyStackTrace = true;
|
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();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user