xref: /freebsd-src/contrib/llvm-project/llvm/include/llvm-c/ErrorHandling.h (revision 349cc55c9796c4596a5b9904cd3281af295f878f)
10b57cec5SDimitry Andric /*===-- llvm-c/ErrorHandling.h - Error Handling C Interface -------*- C -*-===*\
20b57cec5SDimitry Andric |*                                                                            *|
30b57cec5SDimitry Andric |* Part of the LLVM Project, under the Apache License v2.0 with LLVM          *|
40b57cec5SDimitry Andric |* Exceptions.                                                                *|
50b57cec5SDimitry Andric |* See https://llvm.org/LICENSE.txt for license information.                  *|
60b57cec5SDimitry Andric |* SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception                    *|
70b57cec5SDimitry Andric |*                                                                            *|
80b57cec5SDimitry Andric |*===----------------------------------------------------------------------===*|
90b57cec5SDimitry Andric |*                                                                            *|
100b57cec5SDimitry Andric |* This file defines the C interface to LLVM's error handling mechanism.      *|
110b57cec5SDimitry Andric |*                                                                            *|
120b57cec5SDimitry Andric \*===----------------------------------------------------------------------===*/
130b57cec5SDimitry Andric 
14fe6060f1SDimitry Andric #ifndef LLVM_C_ERRORHANDLING_H
15fe6060f1SDimitry Andric #define LLVM_C_ERRORHANDLING_H
160b57cec5SDimitry Andric 
17480093f4SDimitry Andric #include "llvm-c/ExternC.h"
18480093f4SDimitry Andric 
19480093f4SDimitry Andric LLVM_C_EXTERN_C_BEGIN
200b57cec5SDimitry Andric 
21*349cc55cSDimitry Andric /**
22*349cc55cSDimitry Andric  * @addtogroup LLVMCError
23*349cc55cSDimitry Andric  *
24*349cc55cSDimitry Andric  * @{
25*349cc55cSDimitry Andric  */
26*349cc55cSDimitry Andric 
270b57cec5SDimitry Andric typedef void (*LLVMFatalErrorHandler)(const char *Reason);
280b57cec5SDimitry Andric 
290b57cec5SDimitry Andric /**
300b57cec5SDimitry Andric  * Install a fatal error handler. By default, if LLVM detects a fatal error, it
310b57cec5SDimitry Andric  * will call exit(1). This may not be appropriate in many contexts. For example,
320b57cec5SDimitry Andric  * doing exit(1) will bypass many crash reporting/tracing system tools. This
330b57cec5SDimitry Andric  * function allows you to install a callback that will be invoked prior to the
340b57cec5SDimitry Andric  * call to exit(1).
350b57cec5SDimitry Andric  */
360b57cec5SDimitry Andric void LLVMInstallFatalErrorHandler(LLVMFatalErrorHandler Handler);
370b57cec5SDimitry Andric 
380b57cec5SDimitry Andric /**
390b57cec5SDimitry Andric  * Reset the fatal error handler. This resets LLVM's fatal error handling
400b57cec5SDimitry Andric  * behavior to the default.
410b57cec5SDimitry Andric  */
420b57cec5SDimitry Andric void LLVMResetFatalErrorHandler(void);
430b57cec5SDimitry Andric 
440b57cec5SDimitry Andric /**
450b57cec5SDimitry Andric  * Enable LLVM's built-in stack trace code. This intercepts the OS's crash
460b57cec5SDimitry Andric  * signals and prints which component of LLVM you were in at the time if the
470b57cec5SDimitry Andric  * crash.
480b57cec5SDimitry Andric  */
490b57cec5SDimitry Andric void LLVMEnablePrettyStackTrace(void);
500b57cec5SDimitry Andric 
51*349cc55cSDimitry Andric /**
52*349cc55cSDimitry Andric  * @}
53*349cc55cSDimitry Andric  */
54*349cc55cSDimitry Andric 
55480093f4SDimitry Andric LLVM_C_EXTERN_C_END
560b57cec5SDimitry Andric 
570b57cec5SDimitry Andric #endif
58