LLVM  15.0.0git
Namespaces | Functions | Variables
PrettyStackTrace.cpp File Reference
#include "llvm/Support/PrettyStackTrace.h"
#include "llvm-c/ErrorHandling.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.


 This is an optimization pass for GlobalISel generic memory operations.


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


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 *  )

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

Definition at line 155 of file PrettyStackTrace.cpp.

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

Referenced by RegisterCrashPrinter().

◆ PrintCurStackTrace()

static LLVM_ATTRIBUTE_NOINLINE void PrintCurStackTrace ( raw_ostream OS)

Print the current stack trace to the specified stream.

Marked NOINLINE so it can be called from debuggers.

Definition at line 102 of file PrettyStackTrace.cpp.

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

Referenced by CrashHandler(), and printForSigInfoIfNeeded().

◆ printForSigInfoIfNeeded()

static void printForSigInfoIfNeeded ( )

◆ PrintStack()

static void PrintStack ( raw_ostream OS)

Definition at line 81 of file PrettyStackTrace.cpp.

References PrettyStackTraceHead, and llvm::ReverseStackTrace().

Referenced by PrintCurStackTrace().

◆ RegisterCrashPrinter()

static bool RegisterCrashPrinter ( )

Definition at line 274 of file PrettyStackTrace.cpp.

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

Referenced by llvm::EnablePrettyStackTrace().

◆ setCrashLogMessage()

static void setCrashLogMessage ( const char *  msg)

Definition at line 134 of file PrettyStackTrace.cpp.

Referenced by CrashHandler().

Variable Documentation

◆ BugReportMsg

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

Definition at line 40 of file PrettyStackTrace.cpp.

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

◆ GlobalSigInfoGenerationCounter

volatile std::atomic<unsigned> GlobalSigInfoGenerationCounter
Initial value:

Definition at line 67 of file PrettyStackTrace.cpp.

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

◆ PrettyStackTraceHead

LLVM_THREAD_LOCAL PrettyStackTraceEntry* PrettyStackTraceHead = nullptr

◆ ThreadLocalSigInfoGenerationCounter

LLVM_THREAD_LOCAL unsigned ThreadLocalSigInfoGenerationCounter = 0