LLVM  14.0.0git
Namespaces | Functions | Variables
PrettyStackTrace.cpp File Reference
#include "llvm/Support/PrettyStackTrace.h"
#include "llvm-c/ErrorHandling.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/Config/config.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/SaveAndRestore.h"
#include "llvm/Support/Signals.h"
#include "llvm/Support/Watchdog.h"
#include "llvm/Support/raw_ostream.h"
#include <atomic>
#include <cassert>
#include <cstdarg>
#include <cstdio>
#include <cstring>
#include <tuple>
Include dependency graph for PrettyStackTrace.cpp:

Go to the source code of this file.

Namespaces

 llvm
 ---------------------— PointerInfo ------------------------------------—
 

Functions

PrettyStackTraceEntryllvm::ReverseStackTrace (PrettyStackTraceEntry *Head)
 
static void PrintStack (raw_ostream &OS)
 
static LLVM_ATTRIBUTE_NOINLINE void PrintCurStackTrace (raw_ostream &OS)
 Print the current stack trace to the specified stream. More...
 
static void setCrashLogMessage (const char *msg) LLVM_ATTRIBUTE_UNUSED
 
static void CrashHandler (void *)
 This callback is run if a fatal signal is delivered to the process, it prints the pretty stack trace. More...
 
static void printForSigInfoIfNeeded ()
 
static bool RegisterCrashPrinter ()
 
void LLVMEnablePrettyStackTrace ()
 Enable LLVM's built-in stack trace code. More...
 

Variables

static const char * BugReportMsg
 
static LLVM_THREAD_LOCAL PrettyStackTraceEntryPrettyStackTraceHead = nullptr
 
static volatile std::atomic< unsigned > GlobalSigInfoGenerationCounter
 
static LLVM_THREAD_LOCAL unsigned ThreadLocalSigInfoGenerationCounter = 0
 

Function Documentation

◆ CrashHandler()

static void CrashHandler ( void *  )
static

This callback is run if a fatal signal is delivered to the process, it prints the pretty stack trace.

Definition at line 152 of file PrettyStackTrace.cpp.

References BugReportMsg, llvm::errs(), PrintCurStackTrace(), and setCrashLogMessage().

Referenced by RegisterCrashPrinter().

◆ LLVMEnablePrettyStackTrace()

void LLVMEnablePrettyStackTrace ( void  )

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.

Definition at line 322 of file PrettyStackTrace.cpp.

References llvm::EnablePrettyStackTrace().

◆ PrintCurStackTrace()

static LLVM_ATTRIBUTE_NOINLINE void PrintCurStackTrace ( raw_ostream OS)
static

Print the current stack trace to the specified stream.

Marked NOINLINE so it can be called from debuggers.

Definition at line 99 of file PrettyStackTrace.cpp.

References llvm::raw_ostream::flush(), PrettyStackTraceHead, and PrintStack().

Referenced by CrashHandler(), and printForSigInfoIfNeeded().

◆ printForSigInfoIfNeeded()

static void printForSigInfoIfNeeded ( )
static

◆ PrintStack()

static void PrintStack ( raw_ostream OS)
static

Definition at line 78 of file PrettyStackTrace.cpp.

References PrettyStackTraceHead, and llvm::ReverseStackTrace().

Referenced by PrintCurStackTrace().

◆ RegisterCrashPrinter()

static bool RegisterCrashPrinter ( )
static

Definition at line 271 of file PrettyStackTrace.cpp.

References llvm::sys::AddSignalHandler(), and CrashHandler().

Referenced by llvm::EnablePrettyStackTrace().

◆ setCrashLogMessage()

static void setCrashLogMessage ( const char *  msg)
static

Definition at line 131 of file PrettyStackTrace.cpp.

Referenced by CrashHandler().

Variable Documentation

◆ BugReportMsg

const char* BugReportMsg
static
Initial value:
=
"PLEASE submit a bug report to " BUG_REPORT_URL
" and include the crash backtrace.\n"

Definition at line 37 of file PrettyStackTrace.cpp.

Referenced by CrashHandler(), llvm::getBugReportMsg(), and llvm::setBugReportMsg().

◆ GlobalSigInfoGenerationCounter

volatile std::atomic<unsigned> GlobalSigInfoGenerationCounter
static
Initial value:
=
ATOMIC_VAR_INIT(1)

Definition at line 64 of file PrettyStackTrace.cpp.

Referenced by llvm::EnablePrettyStackTraceOnSigInfoForThisThread(), and printForSigInfoIfNeeded().

◆ PrettyStackTraceHead

LLVM_THREAD_LOCAL PrettyStackTraceEntry* PrettyStackTraceHead = nullptr
static

◆ ThreadLocalSigInfoGenerationCounter

LLVM_THREAD_LOCAL unsigned ThreadLocalSigInfoGenerationCounter = 0
static