1 //===-- CrashReason.h -------------------------------------------*- 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 #ifndef liblldb_CrashReason_H_
11 #define liblldb_CrashReason_H_
12 
13 #include "lldb/lldb-types.h"
14 
15 #include <signal.h>
16 
17 #include <string>
18 
19 enum class CrashReason {
20   eInvalidCrashReason,
21 
22   // SIGSEGV crash reasons.
23   eInvalidAddress,
24   ePrivilegedAddress,
25 
26   // SIGILL crash reasons.
27   eIllegalOpcode,
28   eIllegalOperand,
29   eIllegalAddressingMode,
30   eIllegalTrap,
31   ePrivilegedOpcode,
32   ePrivilegedRegister,
33   eCoprocessorError,
34   eInternalStackError,
35 
36   // SIGBUS crash reasons,
37   eIllegalAlignment,
38   eIllegalAddress,
39   eHardwareError,
40 
41   // SIGFPE crash reasons,
42   eIntegerDivideByZero,
43   eIntegerOverflow,
44   eFloatDivideByZero,
45   eFloatOverflow,
46   eFloatUnderflow,
47   eFloatInexactResult,
48   eFloatInvalidOperation,
49   eFloatSubscriptRange
50 };
51 
52 std::string GetCrashReasonString(CrashReason reason, lldb::addr_t fault_addr);
53 
54 const char *CrashReasonAsString(CrashReason reason);
55 
56 CrashReason GetCrashReason(const siginfo_t &info);
57 
58 #endif // #ifndef liblldb_CrashReason_H_
59