]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm-project/llvm/include/llvm/Support/Signals.h
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm-project / llvm / include / llvm / Support / Signals.h
1 //===- llvm/Support/Signals.h - Signal Handling support ----------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 //
9 // This file defines some helpful functions for dealing with the possibility of
10 // unix signals occurring while your program is running.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #ifndef LLVM_SUPPORT_SIGNALS_H
15 #define LLVM_SUPPORT_SIGNALS_H
16
17 #include <string>
18
19 namespace llvm {
20 class StringRef;
21 class raw_ostream;
22
23 namespace sys {
24
25   /// This function runs all the registered interrupt handlers, including the
26   /// removal of files registered by RemoveFileOnSignal.
27   void RunInterruptHandlers();
28
29   /// This function registers signal handlers to ensure that if a signal gets
30   /// delivered that the named file is removed.
31   /// Remove a file if a fatal signal occurs.
32   bool RemoveFileOnSignal(StringRef Filename, std::string* ErrMsg = nullptr);
33
34   /// This function removes a file from the list of files to be removed on
35   /// signal delivery.
36   void DontRemoveFileOnSignal(StringRef Filename);
37
38   /// When an error signal (such as SIGABRT or SIGSEGV) is delivered to the
39   /// process, print a stack trace and then exit.
40   /// Print a stack trace if a fatal signal occurs.
41   /// \param Argv0 the current binary name, used to find the symbolizer
42   ///        relative to the current binary before searching $PATH; can be
43   ///        StringRef(), in which case we will only search $PATH.
44   /// \param DisableCrashReporting if \c true, disable the normal crash
45   ///        reporting mechanisms on the underlying operating system.
46   void PrintStackTraceOnErrorSignal(StringRef Argv0,
47                                     bool DisableCrashReporting = false);
48
49   /// Disable all system dialog boxes that appear when the process crashes.
50   void DisableSystemDialogsOnCrash();
51
52   /// Print the stack trace using the given \c raw_ostream object.
53   void PrintStackTrace(raw_ostream &OS);
54
55   // Run all registered signal handlers.
56   void RunSignalHandlers();
57
58   using SignalHandlerCallback = void (*)(void *);
59
60   /// Add a function to be called when an abort/kill signal is delivered to the
61   /// process. The handler can have a cookie passed to it to identify what
62   /// instance of the handler it is.
63   void AddSignalHandler(SignalHandlerCallback FnPtr, void *Cookie);
64
65   /// This function registers a function to be called when the user "interrupts"
66   /// the program (typically by pressing ctrl-c).  When the user interrupts the
67   /// program, the specified interrupt function is called instead of the program
68   /// being killed, and the interrupt function automatically disabled.
69   ///
70   /// Note that interrupt functions are not allowed to call any non-reentrant
71   /// functions.  An null interrupt function pointer disables the current
72   /// installed function.  Note also that the handler may be executed on a
73   /// different thread on some platforms.
74   void SetInterruptFunction(void (*IF)());
75
76   /// Registers a function to be called when an "info" signal is delivered to
77   /// the process.
78   ///
79   /// On POSIX systems, this will be SIGUSR1; on systems that have it, SIGINFO
80   /// will also be used (typically ctrl-t).
81   ///
82   /// Note that signal handlers are not allowed to call any non-reentrant
83   /// functions.  An null function pointer disables the current installed
84   /// function.  Note also that the handler may be executed on a different
85   /// thread on some platforms.
86   void SetInfoSignalFunction(void (*Handler)());
87
88   /// Registers a function to be called in a "one-shot" manner when a pipe
89   /// signal is delivered to the process (i.e., on a failed write to a pipe).
90   /// After the pipe signal is handled once, the handler is unregistered.
91   ///
92   /// The LLVM signal handling code will not install any handler for the pipe
93   /// signal unless one is provided with this API (see \ref
94   /// DefaultOneShotPipeSignalHandler). This handler must be provided before
95   /// any other LLVM signal handlers are installed: the \ref InitLLVM
96   /// constructor has a flag that can simplify this setup.
97   ///
98   /// Note that the handler is not allowed to call any non-reentrant
99   /// functions.  A null handler pointer disables the current installed
100   /// function.  Note also that the handler may be executed on a
101   /// different thread on some platforms.
102   ///
103   /// This is a no-op on Windows.
104   void SetOneShotPipeSignalFunction(void (*Handler)());
105
106   /// On Unix systems, this function exits with an "IO error" exit code.
107   /// This is a no-op on Windows.
108   void DefaultOneShotPipeSignalHandler();
109
110   /// This function does the following:
111   /// - clean up any temporary files registered with RemoveFileOnSignal()
112   /// - dump the callstack from the exception context
113   /// - call any relevant interrupt/signal handlers
114   /// - create a core/mini dump of the exception context whenever possible
115   /// Context is a system-specific failure context: it is the signal type on
116   /// Unix; the ExceptionContext on Windows.
117   void CleanupOnSignal(uintptr_t Context);
118 } // End sys namespace
119 } // End llvm namespace
120
121 #endif