1 //===- llvm/Support/Signals.h - Signal Handling support ----------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This file defines some helpful functions for dealing with the possibility of 11 // unix signals occurring while your program is running. 12 // 13 //===----------------------------------------------------------------------===// 14 15 #ifndef LLVM_SYSTEM_SIGNALS_H 16 #define LLVM_SYSTEM_SIGNALS_H 17 18 #include "llvm/Support/Path.h" 19 20 namespace llvm { 21 namespace sys { 22 23 /// This function runs all the registered interrupt handlers, including the 24 /// removal of files registered by RemoveFileOnSignal. 25 void RunInterruptHandlers(); 26 27 /// This function registers signal handlers to ensure that if a signal gets 28 /// delivered that the named file is removed. 29 /// @brief Remove a file if a fatal signal occurs. 30 bool RemoveFileOnSignal(const Path &Filename, std::string* ErrMsg = 0); 31 32 /// This function removes a file from the list of files to be removed on 33 /// signal delivery. 34 void DontRemoveFileOnSignal(const Path &Filename); 35 36 /// When an error signal (such as SIBABRT or SIGSEGV) is delivered to the 37 /// process, print a stack trace and then exit. 38 /// @brief Print a stack trace if a fatal signal occurs. 39 void PrintStackTraceOnErrorSignal(); 40 41 /// AddSignalHandler - Add a function to be called when an abort/kill signal 42 /// is delivered to the process. The handler can have a cookie passed to it 43 /// to identify what instance of the handler it is. 44 void AddSignalHandler(void (*FnPtr)(void *), void *Cookie); 45 46 /// This function registers a function to be called when the user "interrupts" 47 /// the program (typically by pressing ctrl-c). When the user interrupts the 48 /// program, the specified interrupt function is called instead of the program 49 /// being killed, and the interrupt function automatically disabled. Note 50 /// that interrupt functions are not allowed to call any non-reentrant 51 /// functions. An null interrupt function pointer disables the current 52 /// installed function. Note also that the handler may be executed on a 53 /// different thread on some platforms. 54 /// @brief Register a function to be called when ctrl-c is pressed. 55 void SetInterruptFunction(void (*IF)()); 56 } // End sys namespace 57 } // End llvm namespace 58 59 #endif 60