diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp index 0cc528fb565e..37aed54abdc8 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.cpp @@ -87,6 +87,8 @@ GDBRemoteCommunicationServerCommon::GDBRemoteCommunicationServerCommon(const cha &GDBRemoteCommunicationServerCommon::Handle_qLaunchSuccess); RegisterMemberFunctionHandler(StringExtractorGDBRemote::eServerPacketType_QListThreadsInStopReply, &GDBRemoteCommunicationServerCommon::Handle_QListThreadsInStopReply); + RegisterMemberFunctionHandler(StringExtractorGDBRemote::eServerPacketType_qEcho, + &GDBRemoteCommunicationServerCommon::Handle_qEcho); RegisterMemberFunctionHandler(StringExtractorGDBRemote::eServerPacketType_qModuleInfo, &GDBRemoteCommunicationServerCommon::Handle_qModuleInfo); RegisterMemberFunctionHandler(StringExtractorGDBRemote::eServerPacketType_qPlatform_chmod, @@ -915,6 +917,7 @@ GDBRemoteCommunicationServerCommon::Handle_qSupported (StringExtractorGDBRemote response.PutCString (";QStartNoAckMode+"); response.PutCString (";QThreadSuffixSupported+"); response.PutCString (";QListThreadsInStopReply+"); + response.PutCString (";qEcho"); #if defined(__linux__) response.PutCString (";qXfer:auxv:read+"); #endif @@ -1152,6 +1155,13 @@ GDBRemoteCommunicationServerCommon::Handle_A (StringExtractorGDBRemote &packet) return SendErrorResponse (8); } +GDBRemoteCommunication::PacketResult +GDBRemoteCommunicationServerCommon::Handle_qEcho (StringExtractorGDBRemote &packet) +{ + // Just echo back the exact same packet for qEcho... + return SendPacketNoLock(packet.GetStringRef().c_str(), packet.GetStringRef().size()); +} + GDBRemoteCommunication::PacketResult GDBRemoteCommunicationServerCommon::Handle_qModuleInfo (StringExtractorGDBRemote &packet) { diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.h b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.h index cb79d106af1d..62b129bb18b9 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.h +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerCommon.h @@ -109,6 +109,9 @@ protected: PacketResult Handle_vFile_MD5 (StringExtractorGDBRemote &packet); + PacketResult + Handle_qEcho (StringExtractorGDBRemote &packet); + PacketResult Handle_qModuleInfo (StringExtractorGDBRemote &packet); diff --git a/lldb/source/Utility/StringExtractorGDBRemote.cpp b/lldb/source/Utility/StringExtractorGDBRemote.cpp index 74979926e538..718c8f6e996d 100644 --- a/lldb/source/Utility/StringExtractorGDBRemote.cpp +++ b/lldb/source/Utility/StringExtractorGDBRemote.cpp @@ -140,6 +140,10 @@ StringExtractorGDBRemote::GetServerPacketType () const if (packet_size == 2) return eServerPacketType_qC; break; + case 'E': + if (PACKET_STARTS_WITH ("qEcho:")) return eServerPacketType_qEcho; + break; + case 'G': if (PACKET_STARTS_WITH ("qGroupName:")) return eServerPacketType_qGroupName; if (PACKET_MATCHES ("qGetWorkingDir")) return eServerPacketType_qGetWorkingDir; diff --git a/lldb/source/Utility/StringExtractorGDBRemote.h b/lldb/source/Utility/StringExtractorGDBRemote.h index cb53758c1a45..78f60217d862 100644 --- a/lldb/source/Utility/StringExtractorGDBRemote.h +++ b/lldb/source/Utility/StringExtractorGDBRemote.h @@ -50,6 +50,7 @@ public: eServerPacketType_qfProcessInfo, eServerPacketType_qsProcessInfo, eServerPacketType_qC, + eServerPacketType_qEcho, eServerPacketType_qGroupName, eServerPacketType_qHostInfo, eServerPacketType_qLaunchGDBServer,