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