aboutsummaryrefslogtreecommitdiff
path: root/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.cpp
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2013-12-06 21:45:27 +0000
committerGreg Clayton <gclayton@apple.com>2013-12-06 21:45:27 +0000
commit3dedae12b5453757055857e83a1f2624bf08d914 (patch)
tree9394760a1d2f54ddf4438a3eca18b493480c608c /lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.cpp
parent0db73111a97137b10897ab8e544d4d9d25f39ce5 (diff)
downloadllvm-3dedae12b5453757055857e83a1f2624bf08d914.zip
llvm-3dedae12b5453757055857e83a1f2624bf08d914.tar.gz
llvm-3dedae12b5453757055857e83a1f2624bf08d914.tar.bz2
Fixed the GDBRemoteCommuncation to return a new GDBRemoteCommuncation::PacketResult enum for all packet sends/receives.
<rdar://problem/15600045> Due to other recent changes, all connections to GDB servers that didn't support the "QStartNoAckMode" packet would cause us to fail to attach to the remote GDB server. The problem was that SendPacket* and WaitForResponse* packets would return a size_t indicating the number of bytes sent/received. The other issue was WaitForResponse* packets would strip the leading '$' and the trailing "#CC" (checksum) bytes, so the unimplemented response packet of "$#00" would get stripped and the WaitForResponse* packets would return 0. These new error codes give us flexibility to to more intelligent things in response to what is returned. llvm-svn: 196610
Diffstat (limited to 'lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.cpp')
-rw-r--r--lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.cpp354
1 files changed, 195 insertions, 159 deletions
diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.cpp
index 50cdd40..9983626 100644
--- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.cpp
+++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.cpp
@@ -90,155 +90,195 @@ GDBRemoteCommunicationServer::GetPacketAndSendResponse (uint32_t timeout_usec,
bool &quit)
{
StringExtractorGDBRemote packet;
- if (WaitForPacketWithTimeoutMicroSecondsNoLock (packet, timeout_usec))
+ PacketResult packet_result = WaitForPacketWithTimeoutMicroSecondsNoLock (packet, timeout_usec);
+ if (packet_result == PacketResult::Success)
{
const StringExtractorGDBRemote::ServerPacketType packet_type = packet.GetServerPacketType ();
switch (packet_type)
{
- case StringExtractorGDBRemote::eServerPacketType_nack:
- case StringExtractorGDBRemote::eServerPacketType_ack:
- break;
+ case StringExtractorGDBRemote::eServerPacketType_nack:
+ case StringExtractorGDBRemote::eServerPacketType_ack:
+ break;
+
+ case StringExtractorGDBRemote::eServerPacketType_invalid:
+ error.SetErrorString("invalid packet");
+ quit = true;
+ break;
+
+ case StringExtractorGDBRemote::eServerPacketType_interrupt:
+ error.SetErrorString("interrupt received");
+ interrupt = true;
+ break;
+
+ default:
+ case StringExtractorGDBRemote::eServerPacketType_unimplemented:
+ packet_result = SendUnimplementedResponse (packet.GetStringRef().c_str());
+ break;
- case StringExtractorGDBRemote::eServerPacketType_invalid:
- error.SetErrorString("invalid packet");
- quit = true;
- break;
+ case StringExtractorGDBRemote::eServerPacketType_A:
+ packet_result = Handle_A (packet);
+ break;
- case StringExtractorGDBRemote::eServerPacketType_interrupt:
- error.SetErrorString("interrupt received");
- interrupt = true;
- break;
+ case StringExtractorGDBRemote::eServerPacketType_qfProcessInfo:
+ packet_result = Handle_qfProcessInfo (packet);
+ break;
- default:
- case StringExtractorGDBRemote::eServerPacketType_unimplemented:
- return SendUnimplementedResponse (packet.GetStringRef().c_str()) > 0;
+ case StringExtractorGDBRemote::eServerPacketType_qsProcessInfo:
+ packet_result = Handle_qsProcessInfo (packet);
+ break;
- case StringExtractorGDBRemote::eServerPacketType_A:
- return Handle_A (packet);
+ case StringExtractorGDBRemote::eServerPacketType_qC:
+ packet_result = Handle_qC (packet);
+ break;
- case StringExtractorGDBRemote::eServerPacketType_qfProcessInfo:
- return Handle_qfProcessInfo (packet);
+ case StringExtractorGDBRemote::eServerPacketType_qHostInfo:
+ packet_result = Handle_qHostInfo (packet);
+ break;
- case StringExtractorGDBRemote::eServerPacketType_qsProcessInfo:
- return Handle_qsProcessInfo (packet);
+ case StringExtractorGDBRemote::eServerPacketType_qLaunchGDBServer:
+ packet_result = Handle_qLaunchGDBServer (packet);
+ break;
- case StringExtractorGDBRemote::eServerPacketType_qC:
- return Handle_qC (packet);
+ case StringExtractorGDBRemote::eServerPacketType_qKillSpawnedProcess:
+ packet_result = Handle_qKillSpawnedProcess (packet);
+ break;
- case StringExtractorGDBRemote::eServerPacketType_qHostInfo:
- return Handle_qHostInfo (packet);
+ case StringExtractorGDBRemote::eServerPacketType_qLaunchSuccess:
+ packet_result = Handle_qLaunchSuccess (packet);
+ break;
- case StringExtractorGDBRemote::eServerPacketType_qLaunchGDBServer:
- return Handle_qLaunchGDBServer (packet);
+ case StringExtractorGDBRemote::eServerPacketType_qGroupName:
+ packet_result = Handle_qGroupName (packet);
+ break;
+
+ case StringExtractorGDBRemote::eServerPacketType_qProcessInfoPID:
+ packet_result = Handle_qProcessInfoPID (packet);
+ break;
+
+ case StringExtractorGDBRemote::eServerPacketType_qSpeedTest:
+ packet_result = Handle_qSpeedTest (packet);
+ break;
+
+ case StringExtractorGDBRemote::eServerPacketType_qUserName:
+ packet_result = Handle_qUserName (packet);
+ break;
+
+ case StringExtractorGDBRemote::eServerPacketType_qGetWorkingDir:
+ packet_result = Handle_qGetWorkingDir(packet);
+ break;
+
+ case StringExtractorGDBRemote::eServerPacketType_QEnvironment:
+ packet_result = Handle_QEnvironment (packet);
+ break;
+
+ case StringExtractorGDBRemote::eServerPacketType_QLaunchArch:
+ packet_result = Handle_QLaunchArch (packet);
+ break;
+
+ case StringExtractorGDBRemote::eServerPacketType_QSetDisableASLR:
+ packet_result = Handle_QSetDisableASLR (packet);
+ break;
+
+ case StringExtractorGDBRemote::eServerPacketType_QSetSTDIN:
+ packet_result = Handle_QSetSTDIN (packet);
+ break;
+
+ case StringExtractorGDBRemote::eServerPacketType_QSetSTDOUT:
+ packet_result = Handle_QSetSTDOUT (packet);
+ break;
+
+ case StringExtractorGDBRemote::eServerPacketType_QSetSTDERR:
+ packet_result = Handle_QSetSTDERR (packet);
+ break;
+
+ case StringExtractorGDBRemote::eServerPacketType_QSetWorkingDir:
+ packet_result = Handle_QSetWorkingDir (packet);
+ break;
+
+ case StringExtractorGDBRemote::eServerPacketType_QStartNoAckMode:
+ packet_result = Handle_QStartNoAckMode (packet);
+ break;
+
+ case StringExtractorGDBRemote::eServerPacketType_qPlatform_mkdir:
+ packet_result = Handle_qPlatform_mkdir (packet);
+ break;
+
+ case StringExtractorGDBRemote::eServerPacketType_qPlatform_chmod:
+ packet_result = Handle_qPlatform_chmod (packet);
+ break;
+
+ case StringExtractorGDBRemote::eServerPacketType_qPlatform_shell:
+ packet_result = Handle_qPlatform_shell (packet);
+ break;
+
+ case StringExtractorGDBRemote::eServerPacketType_vFile_open:
+ packet_result = Handle_vFile_Open (packet);
+ break;
- case StringExtractorGDBRemote::eServerPacketType_qKillSpawnedProcess:
- return Handle_qKillSpawnedProcess (packet);
+ case StringExtractorGDBRemote::eServerPacketType_vFile_close:
+ packet_result = Handle_vFile_Close (packet);
+ break;
- case StringExtractorGDBRemote::eServerPacketType_qLaunchSuccess:
- return Handle_qLaunchSuccess (packet);
+ case StringExtractorGDBRemote::eServerPacketType_vFile_pread:
+ packet_result = Handle_vFile_pRead (packet);
+ break;
- case StringExtractorGDBRemote::eServerPacketType_qGroupName:
- return Handle_qGroupName (packet);
+ case StringExtractorGDBRemote::eServerPacketType_vFile_pwrite:
+ packet_result = Handle_vFile_pWrite (packet);
+ break;
- case StringExtractorGDBRemote::eServerPacketType_qProcessInfoPID:
- return Handle_qProcessInfoPID (packet);
+ case StringExtractorGDBRemote::eServerPacketType_vFile_size:
+ packet_result = Handle_vFile_Size (packet);
+ break;
- case StringExtractorGDBRemote::eServerPacketType_qSpeedTest:
- return Handle_qSpeedTest (packet);
+ case StringExtractorGDBRemote::eServerPacketType_vFile_mode:
+ packet_result = Handle_vFile_Mode (packet);
+ break;
- case StringExtractorGDBRemote::eServerPacketType_qUserName:
- return Handle_qUserName (packet);
+ case StringExtractorGDBRemote::eServerPacketType_vFile_exists:
+ packet_result = Handle_vFile_Exists (packet);
+ break;
- case StringExtractorGDBRemote::eServerPacketType_qGetWorkingDir:
- return Handle_qGetWorkingDir(packet);
-
- case StringExtractorGDBRemote::eServerPacketType_QEnvironment:
- return Handle_QEnvironment (packet);
-
- case StringExtractorGDBRemote::eServerPacketType_QLaunchArch:
- return Handle_QLaunchArch (packet);
-
- case StringExtractorGDBRemote::eServerPacketType_QSetDisableASLR:
- return Handle_QSetDisableASLR (packet);
-
- case StringExtractorGDBRemote::eServerPacketType_QSetSTDIN:
- return Handle_QSetSTDIN (packet);
-
- case StringExtractorGDBRemote::eServerPacketType_QSetSTDOUT:
- return Handle_QSetSTDOUT (packet);
-
- case StringExtractorGDBRemote::eServerPacketType_QSetSTDERR:
- return Handle_QSetSTDERR (packet);
-
- case StringExtractorGDBRemote::eServerPacketType_QSetWorkingDir:
- return Handle_QSetWorkingDir (packet);
-
- case StringExtractorGDBRemote::eServerPacketType_QStartNoAckMode:
- return Handle_QStartNoAckMode (packet);
-
- case StringExtractorGDBRemote::eServerPacketType_qPlatform_mkdir:
- return Handle_qPlatform_mkdir (packet);
-
- case StringExtractorGDBRemote::eServerPacketType_qPlatform_chmod:
- return Handle_qPlatform_chmod (packet);
-
- case StringExtractorGDBRemote::eServerPacketType_qPlatform_shell:
- return Handle_qPlatform_shell (packet);
-
- case StringExtractorGDBRemote::eServerPacketType_vFile_open:
- return Handle_vFile_Open (packet);
-
- case StringExtractorGDBRemote::eServerPacketType_vFile_close:
- return Handle_vFile_Close (packet);
-
- case StringExtractorGDBRemote::eServerPacketType_vFile_pread:
- return Handle_vFile_pRead (packet);
-
- case StringExtractorGDBRemote::eServerPacketType_vFile_pwrite:
- return Handle_vFile_pWrite (packet);
-
- case StringExtractorGDBRemote::eServerPacketType_vFile_size:
- return Handle_vFile_Size (packet);
-
- case StringExtractorGDBRemote::eServerPacketType_vFile_mode:
- return Handle_vFile_Mode (packet);
+ case StringExtractorGDBRemote::eServerPacketType_vFile_stat:
+ packet_result = Handle_vFile_Stat (packet);
+ break;
- case StringExtractorGDBRemote::eServerPacketType_vFile_exists:
- return Handle_vFile_Exists (packet);
+ case StringExtractorGDBRemote::eServerPacketType_vFile_md5:
+ packet_result = Handle_vFile_MD5 (packet);
+ break;
- case StringExtractorGDBRemote::eServerPacketType_vFile_stat:
- return Handle_vFile_Stat (packet);
-
- case StringExtractorGDBRemote::eServerPacketType_vFile_md5:
- return Handle_vFile_MD5 (packet);
-
- case StringExtractorGDBRemote::eServerPacketType_vFile_symlink:
- return Handle_vFile_symlink (packet);
-
- case StringExtractorGDBRemote::eServerPacketType_vFile_unlink:
- return Handle_vFile_unlink (packet);
+ case StringExtractorGDBRemote::eServerPacketType_vFile_symlink:
+ packet_result = Handle_vFile_symlink (packet);
+ break;
+
+ case StringExtractorGDBRemote::eServerPacketType_vFile_unlink:
+ packet_result = Handle_vFile_unlink (packet);
+ break;
}
- return true;
}
else
{
if (!IsConnected())
+ {
error.SetErrorString("lost connection");
+ quit = true;
+ }
else
+ {
error.SetErrorString("timeout");
+ }
}
-
- return false;
+ return packet_result == PacketResult::Success;
}
-size_t
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::SendUnimplementedResponse (const char *)
{
// TODO: Log the packet we aren't handling...
return SendPacketNoLock ("", 0);
}
-size_t
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::SendErrorResponse (uint8_t err)
{
char packet[16];
@@ -248,7 +288,7 @@ GDBRemoteCommunicationServer::SendErrorResponse (uint8_t err)
}
-size_t
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::SendOKResponse ()
{
return SendPacketNoLock ("OK", 2);
@@ -257,10 +297,10 @@ GDBRemoteCommunicationServer::SendOKResponse ()
bool
GDBRemoteCommunicationServer::HandshakeWithClient(Error *error_ptr)
{
- return GetAck();
+ return GetAck() == PacketResult::Success;
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_qHostInfo (StringExtractorGDBRemote &packet)
{
StreamString response;
@@ -352,7 +392,7 @@ GDBRemoteCommunicationServer::Handle_qHostInfo (StringExtractorGDBRemote &packet
}
#endif // #if defined(__APPLE__)
- return SendPacketNoLock (response.GetData(), response.GetSize()) > 0;
+ return SendPacketNoLock (response.GetData(), response.GetSize());
}
static void
@@ -378,7 +418,7 @@ CreateProcessInfoResponse (const ProcessInstanceInfo &proc_info, StreamString &r
}
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_qProcessInfoPID (StringExtractorGDBRemote &packet)
{
// Packet format: "qProcessInfoPID:%i" where %i is the pid
@@ -397,7 +437,7 @@ GDBRemoteCommunicationServer::Handle_qProcessInfoPID (StringExtractorGDBRemote &
return SendErrorResponse (1);
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_qfProcessInfo (StringExtractorGDBRemote &packet)
{
m_proc_infos_index = 0;
@@ -498,7 +538,7 @@ GDBRemoteCommunicationServer::Handle_qfProcessInfo (StringExtractorGDBRemote &pa
return SendErrorResponse (3);
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_qsProcessInfo (StringExtractorGDBRemote &packet)
{
if (m_proc_infos_index < m_proc_infos.GetSize())
@@ -511,7 +551,7 @@ GDBRemoteCommunicationServer::Handle_qsProcessInfo (StringExtractorGDBRemote &pa
return SendErrorResponse (4);
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_qUserName (StringExtractorGDBRemote &packet)
{
// Packet format: "qUserName:%i" where %i is the uid
@@ -531,7 +571,7 @@ GDBRemoteCommunicationServer::Handle_qUserName (StringExtractorGDBRemote &packet
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_qGroupName (StringExtractorGDBRemote &packet)
{
// Packet format: "qGroupName:%i" where %i is the gid
@@ -550,7 +590,7 @@ GDBRemoteCommunicationServer::Handle_qGroupName (StringExtractorGDBRemote &packe
return SendErrorResponse (6);
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_qSpeedTest (StringExtractorGDBRemote &packet)
{
packet.SetFilePos(::strlen ("qSpeedTest:"));
@@ -642,7 +682,7 @@ AcceptPortFromInferior (void *arg)
// return false;
//}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_A (StringExtractorGDBRemote &packet)
{
// The 'A' packet is the most over designed packet ever here with
@@ -719,7 +759,7 @@ GDBRemoteCommunicationServer::Handle_A (StringExtractorGDBRemote &packet)
return SendErrorResponse (8);
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_qC (StringExtractorGDBRemote &packet)
{
lldb::pid_t pid = m_process_launch_info.GetProcessID();
@@ -762,7 +802,7 @@ GDBRemoteCommunicationServer::ReapDebugserverProcess (void *callback_baton,
return true;
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_qLaunchGDBServer (StringExtractorGDBRemote &packet)
{
#ifdef _WIN32
@@ -834,19 +874,17 @@ GDBRemoteCommunicationServer::Handle_qLaunchGDBServer (StringExtractorGDBRemote
if (error.Success())
{
- bool success = false;
-
char response[256];
const int response_len = ::snprintf (response, sizeof(response), "pid:%" PRIu64 ";port:%u;", debugserver_pid, port + m_port_offset);
assert (response_len < sizeof(response));
- success = SendPacketNoLock (response, response_len) > 0;
+ PacketResult packet_result = SendPacketNoLock (response, response_len);
- if (!success)
+ if (packet_result != PacketResult::Success)
{
if (debugserver_pid != LLDB_INVALID_PROCESS_ID)
::kill (debugserver_pid, SIGINT);
}
- return success;
+ return packet_result;
}
}
}
@@ -854,7 +892,7 @@ GDBRemoteCommunicationServer::Handle_qLaunchGDBServer (StringExtractorGDBRemote
#endif
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_qKillSpawnedProcess (StringExtractorGDBRemote &packet)
{
// Spawn a local debugserver as a platform so we can then attach or launch
@@ -907,7 +945,7 @@ GDBRemoteCommunicationServer::Handle_qKillSpawnedProcess (StringExtractorGDBRemo
return SendErrorResponse (11);
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_qLaunchSuccess (StringExtractorGDBRemote &packet)
{
if (m_process_launch_error.Success())
@@ -918,7 +956,7 @@ GDBRemoteCommunicationServer::Handle_qLaunchSuccess (StringExtractorGDBRemote &p
return SendPacketNoLock (response.GetData(), response.GetSize());
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_QEnvironment (StringExtractorGDBRemote &packet)
{
packet.SetFilePos(::strlen ("QEnvironment:"));
@@ -931,7 +969,7 @@ GDBRemoteCommunicationServer::Handle_QEnvironment (StringExtractorGDBRemote &pa
return SendErrorResponse (12);
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_QLaunchArch (StringExtractorGDBRemote &packet)
{
packet.SetFilePos(::strlen ("QLaunchArch:"));
@@ -946,7 +984,7 @@ GDBRemoteCommunicationServer::Handle_QLaunchArch (StringExtractorGDBRemote &pack
return SendErrorResponse(13);
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_QSetDisableASLR (StringExtractorGDBRemote &packet)
{
packet.SetFilePos(::strlen ("QSetDisableASLR:"));
@@ -957,7 +995,7 @@ GDBRemoteCommunicationServer::Handle_QSetDisableASLR (StringExtractorGDBRemote &
return SendOKResponse ();
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_QSetWorkingDir (StringExtractorGDBRemote &packet)
{
packet.SetFilePos(::strlen ("QSetWorkingDir:"));
@@ -981,7 +1019,7 @@ GDBRemoteCommunicationServer::Handle_QSetWorkingDir (StringExtractorGDBRemote &p
return SendOKResponse ();
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_qGetWorkingDir (StringExtractorGDBRemote &packet)
{
StreamString response;
@@ -997,8 +1035,7 @@ GDBRemoteCommunicationServer::Handle_qGetWorkingDir (StringExtractorGDBRemote &p
else
{
response.PutBytesAsRawHex8(cwd, strlen(cwd));
- SendPacketNoLock(response.GetData(), response.GetSize());
- return true;
+ return SendPacketNoLock(response.GetData(), response.GetSize());
}
}
else
@@ -1007,8 +1044,7 @@ GDBRemoteCommunicationServer::Handle_qGetWorkingDir (StringExtractorGDBRemote &p
if (working_dir && working_dir[0])
{
response.PutBytesAsRawHex8(working_dir, strlen(working_dir));
- SendPacketNoLock(response.GetData(), response.GetSize());
- return true;
+ return SendPacketNoLock(response.GetData(), response.GetSize());
}
else
{
@@ -1017,7 +1053,7 @@ GDBRemoteCommunicationServer::Handle_qGetWorkingDir (StringExtractorGDBRemote &p
}
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_QSetSTDIN (StringExtractorGDBRemote &packet)
{
packet.SetFilePos(::strlen ("QSetSTDIN:"));
@@ -1034,7 +1070,7 @@ GDBRemoteCommunicationServer::Handle_QSetSTDIN (StringExtractorGDBRemote &packet
return SendErrorResponse (15);
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_QSetSTDOUT (StringExtractorGDBRemote &packet)
{
packet.SetFilePos(::strlen ("QSetSTDOUT:"));
@@ -1051,7 +1087,7 @@ GDBRemoteCommunicationServer::Handle_QSetSTDOUT (StringExtractorGDBRemote &packe
return SendErrorResponse (16);
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_QSetSTDERR (StringExtractorGDBRemote &packet)
{
packet.SetFilePos(::strlen ("QSetSTDERR:"));
@@ -1068,16 +1104,16 @@ GDBRemoteCommunicationServer::Handle_QSetSTDERR (StringExtractorGDBRemote &packe
return SendErrorResponse (17);
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_QStartNoAckMode (StringExtractorGDBRemote &packet)
{
// Send response first before changing m_send_acks to we ack this packet
- SendOKResponse ();
+ PacketResult packet_result = SendOKResponse ();
m_send_acks = false;
- return true;
+ return packet_result;
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_qPlatform_mkdir (StringExtractorGDBRemote &packet)
{
packet.SetFilePos(::strlen("qPlatform_mkdir:"));
@@ -1095,7 +1131,7 @@ GDBRemoteCommunicationServer::Handle_qPlatform_mkdir (StringExtractorGDBRemote &
return SendErrorResponse(20);
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_qPlatform_chmod (StringExtractorGDBRemote &packet)
{
packet.SetFilePos(::strlen("qPlatform_chmod:"));
@@ -1114,7 +1150,7 @@ GDBRemoteCommunicationServer::Handle_qPlatform_chmod (StringExtractorGDBRemote &
return SendErrorResponse(19);
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_vFile_Open (StringExtractorGDBRemote &packet)
{
packet.SetFilePos(::strlen("vFile:open:"));
@@ -1143,7 +1179,7 @@ GDBRemoteCommunicationServer::Handle_vFile_Open (StringExtractorGDBRemote &packe
return SendErrorResponse(18);
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_vFile_Close (StringExtractorGDBRemote &packet)
{
packet.SetFilePos(::strlen("vFile:close:"));
@@ -1168,7 +1204,7 @@ GDBRemoteCommunicationServer::Handle_vFile_Close (StringExtractorGDBRemote &pack
return SendPacketNoLock(response.GetData(), response.GetSize());
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_vFile_pRead (StringExtractorGDBRemote &packet)
{
#ifdef _WIN32
@@ -1210,7 +1246,7 @@ GDBRemoteCommunicationServer::Handle_vFile_pRead (StringExtractorGDBRemote &pack
#endif
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_vFile_pWrite (StringExtractorGDBRemote &packet)
{
#ifdef _WIN32
@@ -1247,7 +1283,7 @@ GDBRemoteCommunicationServer::Handle_vFile_pWrite (StringExtractorGDBRemote &pac
#endif
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_vFile_Size (StringExtractorGDBRemote &packet)
{
packet.SetFilePos(::strlen("vFile:size:"));
@@ -1269,7 +1305,7 @@ GDBRemoteCommunicationServer::Handle_vFile_Size (StringExtractorGDBRemote &packe
return SendErrorResponse(22);
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_vFile_Mode (StringExtractorGDBRemote &packet)
{
packet.SetFilePos(::strlen("vFile:mode:"));
@@ -1288,7 +1324,7 @@ GDBRemoteCommunicationServer::Handle_vFile_Mode (StringExtractorGDBRemote &packe
return SendErrorResponse(23);
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_vFile_Exists (StringExtractorGDBRemote &packet)
{
packet.SetFilePos(::strlen("vFile:exists:"));
@@ -1309,7 +1345,7 @@ GDBRemoteCommunicationServer::Handle_vFile_Exists (StringExtractorGDBRemote &pac
return SendErrorResponse(24);
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_vFile_symlink (StringExtractorGDBRemote &packet)
{
packet.SetFilePos(::strlen("vFile:symlink:"));
@@ -1323,7 +1359,7 @@ GDBRemoteCommunicationServer::Handle_vFile_symlink (StringExtractorGDBRemote &pa
return SendPacketNoLock(response.GetData(), response.GetSize());
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_vFile_unlink (StringExtractorGDBRemote &packet)
{
packet.SetFilePos(::strlen("vFile:unlink:"));
@@ -1335,7 +1371,7 @@ GDBRemoteCommunicationServer::Handle_vFile_unlink (StringExtractorGDBRemote &pac
return SendPacketNoLock(response.GetData(), response.GetSize());
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_qPlatform_shell (StringExtractorGDBRemote &packet)
{
packet.SetFilePos(::strlen("qPlatform_shell:"));
@@ -1377,13 +1413,13 @@ GDBRemoteCommunicationServer::Handle_qPlatform_shell (StringExtractorGDBRemote &
return SendErrorResponse(24);
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_vFile_Stat (StringExtractorGDBRemote &packet)
{
return SendUnimplementedResponse("GDBRemoteCommunicationServer::Handle_vFile_Stat() unimplemented");
}
-bool
+GDBRemoteCommunication::PacketResult
GDBRemoteCommunicationServer::Handle_vFile_MD5 (StringExtractorGDBRemote &packet)
{
packet.SetFilePos(::strlen("vFile:MD5:"));