1//===-- CrashReason.h -------------------------------------------*- 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#ifndef liblldb_CrashReason_H_
10#define liblldb_CrashReason_H_
11
12#include "lldb/lldb-types.h"
13
14#include <signal.h>
15
16#include <string>
17
18enum class CrashReason {
19  eInvalidCrashReason,
20
21  // SIGSEGV crash reasons.
22  eInvalidAddress,
23  ePrivilegedAddress,
24  eBoundViolation,
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
52std::string GetCrashReasonString(CrashReason reason, lldb::addr_t fault_addr);
53std::string GetCrashReasonString(CrashReason reason, const siginfo_t &info);
54
55const char *CrashReasonAsString(CrashReason reason);
56
57CrashReason GetCrashReason(const siginfo_t &info);
58
59#endif // #ifndef liblldb_CrashReason_H_
60