diff options
author | Stephen Wilson <wilsons@start.ca> | 2011-03-30 15:55:52 +0000 |
---|---|---|
committer | Stephen Wilson <wilsons@start.ca> | 2011-03-30 15:55:52 +0000 |
commit | 84ffe7033c41fd3501eab22632cab93d7df7b1a9 (patch) | |
tree | 24cc9529cf897be63fa3db393e0441e53d6914b9 /lldb/source/Plugins/Process/Linux/ProcessMessage.cpp | |
parent | 8564e0de96d18eba9d8501611591c7c3ef9d8be3 (diff) | |
download | bcm5719-llvm-84ffe7033c41fd3501eab22632cab93d7df7b1a9.tar.gz bcm5719-llvm-84ffe7033c41fd3501eab22632cab93d7df7b1a9.zip |
linux: initial support for 'real' signal handling
This patch upgrades the Linux process plugin to handle a larger range of signal
events. For example, we can detect when the inferior has "crashed" and why,
interrupt a running process, deliver an arbitrary signal, and so on.
llvm-svn: 128547
Diffstat (limited to 'lldb/source/Plugins/Process/Linux/ProcessMessage.cpp')
-rw-r--r-- | lldb/source/Plugins/Process/Linux/ProcessMessage.cpp | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/lldb/source/Plugins/Process/Linux/ProcessMessage.cpp b/lldb/source/Plugins/Process/Linux/ProcessMessage.cpp new file mode 100644 index 00000000000..db7827d551d --- /dev/null +++ b/lldb/source/Plugins/Process/Linux/ProcessMessage.cpp @@ -0,0 +1,91 @@ +//===-- ProcessMessage.cpp --------------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "ProcessMessage.h" + +using namespace lldb_private; + +const char * +ProcessMessage::GetCrashReasonString(CrashReason reason) +{ + const char *str = NULL; + + switch (reason) + { + default: + assert(false && "invalid CrashReason"); + break; + + case eInvalidAddress: + str = "invalid address"; + break; + case ePrivilegedAddress: + str = "address access protected"; + break; + case eIllegalOpcode: + str = "illegal instruction"; + break; + case eIllegalOperand: + str = "illegal instruction operand"; + break; + case eIllegalAddressingMode: + str = "illegal addressing mode"; + break; + case eIllegalTrap: + str = "illegal trap"; + break; + case ePrivilegedOpcode: + str = "privileged instruction"; + break; + case ePrivilegedRegister: + str = "privileged register"; + break; + case eCoprocessorError: + str = "coprocessor error"; + break; + case eInternalStackError: + str = "internal stack error"; + break; + case eIllegalAlignment: + str = "illegal alignment"; + break; + case eIllegalAddress: + str = "illegal address"; + break; + case eHardwareError: + str = "hardware error"; + break; + case eIntegerDivideByZero: + str = "integer divide by zero"; + break; + case eIntegerOverflow: + str = "integer overflow"; + break; + case eFloatDivideByZero: + str = "floating point divide by zero"; + break; + case eFloatOverflow: + str = "floating point overflow"; + break; + case eFloatUnderflow: + str = "floating point underflow"; + break; + case eFloatInexactResult: + str = "inexact floating point result"; + break; + case eFloatInvalidOperation: + str = "invalid floating point operation"; + break; + case eFloatSubscriptRange: + str = "invalid floating point subscript range"; + break; + } + + return str; +} |