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
 This is an optimization pass for GlobalISel generic memory operations.
 

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().

◆ 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