forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			246 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			246 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C++
		
	
	
	
//===-- 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;
 | 
						|
}
 | 
						|
 | 
						|
const char *
 | 
						|
ProcessMessage::PrintCrashReason(CrashReason reason)
 | 
						|
{
 | 
						|
#ifdef LLDB_CONFIGURATION_BUILDANDINTEGRATION
 | 
						|
    // Just return the code in asci for integration builds.
 | 
						|
    chcar str[8];
 | 
						|
    sprintf(str, "%d", reason);
 | 
						|
#else
 | 
						|
    const char *str = NULL;
 | 
						|
 | 
						|
    switch (reason)
 | 
						|
    {
 | 
						|
    default:
 | 
						|
        assert(false && "invalid CrashReason");
 | 
						|
        break;
 | 
						|
 | 
						|
        case eInvalidCrashReason:
 | 
						|
            str = "eInvalidCrashReason";
 | 
						|
            break;
 | 
						|
 | 
						|
        // SIGSEGV crash reasons.
 | 
						|
        case eInvalidAddress:
 | 
						|
            str = "eInvalidAddress";
 | 
						|
            break;
 | 
						|
        case ePrivilegedAddress:
 | 
						|
            str = "ePrivilegedAddress";
 | 
						|
            break;
 | 
						|
 | 
						|
        // SIGILL crash reasons.
 | 
						|
        case eIllegalOpcode:
 | 
						|
            str = "eIllegalOpcode";
 | 
						|
            break;
 | 
						|
        case eIllegalOperand:
 | 
						|
            str = "eIllegalOperand";
 | 
						|
            break;
 | 
						|
        case eIllegalAddressingMode:
 | 
						|
            str = "eIllegalAddressingMode";
 | 
						|
            break;
 | 
						|
        case eIllegalTrap:
 | 
						|
            str = "eIllegalTrap";
 | 
						|
            break;
 | 
						|
        case ePrivilegedOpcode:
 | 
						|
            str = "ePrivilegedOpcode";
 | 
						|
            break;
 | 
						|
        case ePrivilegedRegister:
 | 
						|
            str = "ePrivilegedRegister";
 | 
						|
            break;
 | 
						|
        case eCoprocessorError:
 | 
						|
            str = "eCoprocessorError";
 | 
						|
            break;
 | 
						|
        case eInternalStackError:
 | 
						|
            str = "eInternalStackError";
 | 
						|
            break;
 | 
						|
 | 
						|
        // SIGBUS crash reasons:
 | 
						|
        case eIllegalAlignment:
 | 
						|
            str = "eIllegalAlignment";
 | 
						|
            break;
 | 
						|
        case eIllegalAddress:
 | 
						|
            str = "eIllegalAddress";
 | 
						|
            break;
 | 
						|
        case eHardwareError:
 | 
						|
            str = "eHardwareError";
 | 
						|
            break;
 | 
						|
 | 
						|
        // SIGFPE crash reasons:
 | 
						|
        case eIntegerDivideByZero:
 | 
						|
            str = "eIntegerDivideByZero";
 | 
						|
            break;
 | 
						|
        case eIntegerOverflow:
 | 
						|
            str = "eIntegerOverflow";
 | 
						|
            break;
 | 
						|
        case eFloatDivideByZero:
 | 
						|
            str = "eFloatDivideByZero";
 | 
						|
            break;
 | 
						|
        case eFloatOverflow:
 | 
						|
            str = "eFloatOverflow";
 | 
						|
            break;
 | 
						|
        case eFloatUnderflow:
 | 
						|
            str = "eFloatUnderflow";
 | 
						|
            break;
 | 
						|
        case eFloatInexactResult:
 | 
						|
            str = "eFloatInexactResult";
 | 
						|
            break;
 | 
						|
        case eFloatInvalidOperation:
 | 
						|
            str = "eFloatInvalidOperation";
 | 
						|
            break;
 | 
						|
        case eFloatSubscriptRange:
 | 
						|
            str = "eFloatSubscriptRange";
 | 
						|
            break;
 | 
						|
    }
 | 
						|
#endif
 | 
						|
 | 
						|
    return str;
 | 
						|
}
 | 
						|
 | 
						|
const char *
 | 
						|
ProcessMessage::PrintCrashReason() const
 | 
						|
{
 | 
						|
    return PrintCrashReason(m_crash_reason);
 | 
						|
}
 | 
						|
 | 
						|
const char *
 | 
						|
ProcessMessage::PrintKind(Kind kind)
 | 
						|
{
 | 
						|
#ifdef LLDB_CONFIGURATION_BUILDANDINTEGRATION
 | 
						|
    // Just return the code in asci for integration builds.
 | 
						|
    chcar str[8];
 | 
						|
    sprintf(str, "%d", reason);
 | 
						|
#else
 | 
						|
    const char *str = NULL;
 | 
						|
 | 
						|
    switch (kind)
 | 
						|
    {
 | 
						|
    default:
 | 
						|
        assert(false && "invalid Kind");
 | 
						|
        break;
 | 
						|
 | 
						|
    case eInvalidMessage:
 | 
						|
        str = "eInvalidMessage";
 | 
						|
        break;
 | 
						|
    case eExitMessage:
 | 
						|
        str = "eExitMessage";
 | 
						|
        break;
 | 
						|
    case eLimboMessage:
 | 
						|
        str = "eLimboMessage";
 | 
						|
        break;
 | 
						|
    case eSignalMessage:
 | 
						|
        str = "eSignalMessage";
 | 
						|
        break;
 | 
						|
    case eSignalDeliveredMessage:
 | 
						|
        str = "eSignalDeliveredMessage";
 | 
						|
        break;
 | 
						|
    case eTraceMessage:
 | 
						|
        str = "eTraceMessage";
 | 
						|
        break;
 | 
						|
    case eBreakpointMessage:
 | 
						|
        str = "eBreakpointMessage";
 | 
						|
        break;
 | 
						|
    case eCrashMessage:
 | 
						|
        str = "eCrashMessage";
 | 
						|
        break;
 | 
						|
    }
 | 
						|
#endif
 | 
						|
 | 
						|
    return str;
 | 
						|
}
 | 
						|
 | 
						|
const char *
 | 
						|
ProcessMessage::PrintKind() const
 | 
						|
{
 | 
						|
    return PrintKind(m_kind);
 | 
						|
}
 |