130fdc8d8SChris Lattner //===-- StringExtractorGDBRemote.cpp ----------------------------*- C++ -*-===// 230fdc8d8SChris Lattner // 330fdc8d8SChris Lattner // The LLVM Compiler Infrastructure 430fdc8d8SChris Lattner // 530fdc8d8SChris Lattner // This file is distributed under the University of Illinois Open Source 630fdc8d8SChris Lattner // License. See LICENSE.TXT for details. 730fdc8d8SChris Lattner // 830fdc8d8SChris Lattner //===----------------------------------------------------------------------===// 930fdc8d8SChris Lattner 10*c982c768SGreg Clayton #include "Utility/StringExtractorGDBRemote.h" 1130fdc8d8SChris Lattner 1230fdc8d8SChris Lattner // C Includes 1330fdc8d8SChris Lattner // C++ Includes 1430fdc8d8SChris Lattner // Other libraries and framework includes 1530fdc8d8SChris Lattner // Project includes 1630fdc8d8SChris Lattner 1730fdc8d8SChris Lattner 1830fdc8d8SChris Lattner 1930fdc8d8SChris Lattner StringExtractorGDBRemote::Type 2030fdc8d8SChris Lattner StringExtractorGDBRemote::GetType () const 2130fdc8d8SChris Lattner { 2230fdc8d8SChris Lattner if (m_packet.empty()) 2330fdc8d8SChris Lattner return eUnsupported; 2430fdc8d8SChris Lattner 2530fdc8d8SChris Lattner switch (m_packet[0]) 2630fdc8d8SChris Lattner { 2730fdc8d8SChris Lattner case 'E': 2830fdc8d8SChris Lattner if (m_packet.size() == 3 && 2930fdc8d8SChris Lattner isxdigit(m_packet[1]) && 3030fdc8d8SChris Lattner isxdigit(m_packet[2])) 3130fdc8d8SChris Lattner return eError; 3230fdc8d8SChris Lattner break; 3330fdc8d8SChris Lattner 3430fdc8d8SChris Lattner case 'O': 3530fdc8d8SChris Lattner if (m_packet.size() == 2 && m_packet[1] == 'K') 3630fdc8d8SChris Lattner return eOK; 3730fdc8d8SChris Lattner break; 3830fdc8d8SChris Lattner 3930fdc8d8SChris Lattner case '+': 4030fdc8d8SChris Lattner if (m_packet.size() == 1) 4130fdc8d8SChris Lattner return eAck; 4230fdc8d8SChris Lattner break; 4330fdc8d8SChris Lattner 4430fdc8d8SChris Lattner case '-': 4530fdc8d8SChris Lattner if (m_packet.size() == 1) 4630fdc8d8SChris Lattner return eNack; 4730fdc8d8SChris Lattner break; 4830fdc8d8SChris Lattner } 4930fdc8d8SChris Lattner return eResponse; 5030fdc8d8SChris Lattner } 5130fdc8d8SChris Lattner 5230fdc8d8SChris Lattner bool 5330fdc8d8SChris Lattner StringExtractorGDBRemote::IsOKPacket() const 5430fdc8d8SChris Lattner { 5530fdc8d8SChris Lattner return GetType () == eOK; 5630fdc8d8SChris Lattner } 5730fdc8d8SChris Lattner 5830fdc8d8SChris Lattner 5930fdc8d8SChris Lattner bool 6030fdc8d8SChris Lattner StringExtractorGDBRemote::IsUnsupportedPacket() const 6130fdc8d8SChris Lattner { 6230fdc8d8SChris Lattner return GetType () == eUnsupported; 6330fdc8d8SChris Lattner } 6430fdc8d8SChris Lattner 6530fdc8d8SChris Lattner bool 6630fdc8d8SChris Lattner StringExtractorGDBRemote::IsNormalPacket() const 6730fdc8d8SChris Lattner { 6830fdc8d8SChris Lattner return GetType () == eResponse; 6930fdc8d8SChris Lattner } 7030fdc8d8SChris Lattner 7130fdc8d8SChris Lattner bool 7230fdc8d8SChris Lattner StringExtractorGDBRemote::IsErrorPacket() const 7330fdc8d8SChris Lattner { 7430fdc8d8SChris Lattner return GetType () == eError && 7530fdc8d8SChris Lattner m_packet.size() == 3 && 7630fdc8d8SChris Lattner isxdigit(m_packet[1]) && 7730fdc8d8SChris Lattner isxdigit(m_packet[2]); 7830fdc8d8SChris Lattner } 7930fdc8d8SChris Lattner 8030fdc8d8SChris Lattner uint8_t 8130fdc8d8SChris Lattner StringExtractorGDBRemote::GetError () 8230fdc8d8SChris Lattner { 8330fdc8d8SChris Lattner if (GetType() == eError) 8430fdc8d8SChris Lattner { 8530fdc8d8SChris Lattner SetFilePos(1); 8630fdc8d8SChris Lattner return GetHexU8(255); 8730fdc8d8SChris Lattner } 8830fdc8d8SChris Lattner return 0; 8930fdc8d8SChris Lattner } 90