xref: /openbsd-src/gnu/llvm/lldb/source/Plugins/Process/POSIX/CrashReason.h (revision be691f3bb6417f04a68938fadbcaee2d5795e764)
1061da546Spatrick //===-- CrashReason.h -------------------------------------------*- C++ -*-===//
2061da546Spatrick //
3061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4061da546Spatrick // See https://llvm.org/LICENSE.txt for license information.
5061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6061da546Spatrick //
7061da546Spatrick //===----------------------------------------------------------------------===//
8061da546Spatrick 
9061da546Spatrick #ifndef liblldb_CrashReason_H_
10061da546Spatrick #define liblldb_CrashReason_H_
11061da546Spatrick 
12061da546Spatrick #include "lldb/lldb-types.h"
13061da546Spatrick 
14*be691f3bSpatrick #include <csignal>
15061da546Spatrick 
16061da546Spatrick #include <string>
17061da546Spatrick 
18061da546Spatrick enum class CrashReason {
19061da546Spatrick   eInvalidCrashReason,
20061da546Spatrick 
21061da546Spatrick   // SIGSEGV crash reasons.
22061da546Spatrick   eInvalidAddress,
23061da546Spatrick   ePrivilegedAddress,
24061da546Spatrick   eBoundViolation,
25*be691f3bSpatrick   eAsyncTagCheckFault,
26*be691f3bSpatrick   eSyncTagCheckFault,
27061da546Spatrick 
28061da546Spatrick   // SIGILL crash reasons.
29061da546Spatrick   eIllegalOpcode,
30061da546Spatrick   eIllegalOperand,
31061da546Spatrick   eIllegalAddressingMode,
32061da546Spatrick   eIllegalTrap,
33061da546Spatrick   ePrivilegedOpcode,
34061da546Spatrick   ePrivilegedRegister,
35061da546Spatrick   eCoprocessorError,
36061da546Spatrick   eInternalStackError,
37061da546Spatrick 
38061da546Spatrick   // SIGBUS crash reasons,
39061da546Spatrick   eIllegalAlignment,
40061da546Spatrick   eIllegalAddress,
41061da546Spatrick   eHardwareError,
42061da546Spatrick 
43061da546Spatrick   // SIGFPE crash reasons,
44061da546Spatrick   eIntegerDivideByZero,
45061da546Spatrick   eIntegerOverflow,
46061da546Spatrick   eFloatDivideByZero,
47061da546Spatrick   eFloatOverflow,
48061da546Spatrick   eFloatUnderflow,
49061da546Spatrick   eFloatInexactResult,
50061da546Spatrick   eFloatInvalidOperation,
51061da546Spatrick   eFloatSubscriptRange
52061da546Spatrick };
53061da546Spatrick 
54061da546Spatrick std::string GetCrashReasonString(CrashReason reason, lldb::addr_t fault_addr);
55061da546Spatrick std::string GetCrashReasonString(CrashReason reason, const siginfo_t &info);
56061da546Spatrick 
57061da546Spatrick const char *CrashReasonAsString(CrashReason reason);
58061da546Spatrick 
59061da546Spatrick CrashReason GetCrashReason(const siginfo_t &info);
60061da546Spatrick 
61061da546Spatrick #endif // #ifndef liblldb_CrashReason_H_
62