1 //===-- ProcessMessage.cpp --------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "ProcessMessage.h"
14 using namespace lldb_private;
18 inline void AppendFaultAddr(std::string& str, lldb::addr_t addr)
21 ss << " (fault address: 0x" << std::hex << addr << ")";
28 ProcessMessage::GetCrashReasonString(CrashReason reason, lldb::addr_t fault_addr)
30 static std::string str;
35 assert(false && "invalid CrashReason");
39 str = "invalid address";
40 AppendFaultAddr(str, fault_addr);
42 case ePrivilegedAddress:
43 str = "address access protected";
44 AppendFaultAddr(str, fault_addr);
47 str = "illegal instruction";
50 str = "illegal instruction operand";
52 case eIllegalAddressingMode:
53 str = "illegal addressing mode";
58 case ePrivilegedOpcode:
59 str = "privileged instruction";
61 case ePrivilegedRegister:
62 str = "privileged register";
64 case eCoprocessorError:
65 str = "coprocessor error";
67 case eInternalStackError:
68 str = "internal stack error";
70 case eIllegalAlignment:
71 str = "illegal alignment";
74 str = "illegal address";
77 str = "hardware error";
79 case eIntegerDivideByZero:
80 str = "integer divide by zero";
82 case eIntegerOverflow:
83 str = "integer overflow";
85 case eFloatDivideByZero:
86 str = "floating point divide by zero";
89 str = "floating point overflow";
92 str = "floating point underflow";
94 case eFloatInexactResult:
95 str = "inexact floating point result";
97 case eFloatInvalidOperation:
98 str = "invalid floating point operation";
100 case eFloatSubscriptRange:
101 str = "invalid floating point subscript range";
109 ProcessMessage::PrintCrashReason(CrashReason reason)
111 #ifdef LLDB_CONFIGURATION_BUILDANDINTEGRATION
112 // Just return the code in asci for integration builds.
114 sprintf(str, "%d", reason);
116 const char *str = NULL;
120 case eInvalidCrashReason:
121 str = "eInvalidCrashReason";
124 // SIGSEGV crash reasons.
125 case eInvalidAddress:
126 str = "eInvalidAddress";
128 case ePrivilegedAddress:
129 str = "ePrivilegedAddress";
132 // SIGILL crash reasons.
134 str = "eIllegalOpcode";
136 case eIllegalOperand:
137 str = "eIllegalOperand";
139 case eIllegalAddressingMode:
140 str = "eIllegalAddressingMode";
143 str = "eIllegalTrap";
145 case ePrivilegedOpcode:
146 str = "ePrivilegedOpcode";
148 case ePrivilegedRegister:
149 str = "ePrivilegedRegister";
151 case eCoprocessorError:
152 str = "eCoprocessorError";
154 case eInternalStackError:
155 str = "eInternalStackError";
158 // SIGBUS crash reasons:
159 case eIllegalAlignment:
160 str = "eIllegalAlignment";
162 case eIllegalAddress:
163 str = "eIllegalAddress";
166 str = "eHardwareError";
169 // SIGFPE crash reasons:
170 case eIntegerDivideByZero:
171 str = "eIntegerDivideByZero";
173 case eIntegerOverflow:
174 str = "eIntegerOverflow";
176 case eFloatDivideByZero:
177 str = "eFloatDivideByZero";
180 str = "eFloatOverflow";
182 case eFloatUnderflow:
183 str = "eFloatUnderflow";
185 case eFloatInexactResult:
186 str = "eFloatInexactResult";
188 case eFloatInvalidOperation:
189 str = "eFloatInvalidOperation";
191 case eFloatSubscriptRange:
192 str = "eFloatSubscriptRange";
201 ProcessMessage::PrintCrashReason() const
203 return PrintCrashReason(m_crash_reason);
207 ProcessMessage::PrintKind(Kind kind)
209 #ifdef LLDB_CONFIGURATION_BUILDANDINTEGRATION
210 // Just return the code in asci for integration builds.
212 sprintf(str, "%d", reason);
214 const char *str = NULL;
218 case eInvalidMessage:
219 str = "eInvalidMessage";
222 str = "eExitMessage";
225 str = "eLimboMessage";
228 str = "eSignalMessage";
230 case eSignalDeliveredMessage:
231 str = "eSignalDeliveredMessage";
234 str = "eTraceMessage";
236 case eBreakpointMessage:
237 str = "eBreakpointMessage";
239 case eWatchpointMessage:
240 str = "eWatchpointMessage";
243 str = "eCrashMessage";
245 case eNewThreadMessage:
246 str = "eNewThreadMessage";
255 ProcessMessage::PrintKind() const
257 return PrintKind(m_kind);