[Lldb-commits] [lldb] r196525 - Extends StringExtractorGDBRemote to support debugger packets.

Jean-Daniel Dupas devlists at shadowlab.org
Thu Dec 5 11:25:46 PST 2013


Author: jddupas
Date: Thu Dec  5 13:25:45 2013
New Revision: 196525

URL: http://llvm.org/viewvc/llvm-project?rev=196525&view=rev
Log:
Extends StringExtractorGDBRemote to support debugger packets.

CC: lldb-commits

Differential Revision: http://llvm-reviews.chandlerc.com/D2337

Modified:
    lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.cpp
    lldb/trunk/source/Utility/StringExtractorGDBRemote.cpp
    lldb/trunk/source/Utility/StringExtractorGDBRemote.h

Modified: lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.cpp?rev=196525&r1=196524&r2=196525&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.cpp (original)
+++ lldb/trunk/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServer.cpp Thu Dec  5 13:25:45 2013
@@ -109,6 +109,7 @@ GDBRemoteCommunicationServer::GetPacketA
                 interrupt = true;
                 break;
 
+            default:
             case StringExtractorGDBRemote::eServerPacketType_unimplemented:
                 return SendUnimplementedResponse (packet.GetStringRef().c_str()) > 0;
 

Modified: lldb/trunk/source/Utility/StringExtractorGDBRemote.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Utility/StringExtractorGDBRemote.cpp?rev=196525&r1=196524&r2=196525&view=diff
==============================================================================
--- lldb/trunk/source/Utility/StringExtractorGDBRemote.cpp (original)
+++ lldb/trunk/source/Utility/StringExtractorGDBRemote.cpp Thu Dec  5 13:25:45 2013
@@ -80,22 +80,40 @@ StringExtractorGDBRemote::GetServerPacke
         return eServerPacketType_A;
             
     case 'Q':
+
         switch (packet_cstr[1])
         {
         case 'E':
-            if (PACKET_STARTS_WITH ("QEnvironment:"))           return eServerPacketType_QEnvironment; 
+            if (PACKET_STARTS_WITH ("QEnvironment:"))           return eServerPacketType_QEnvironment;
+            if (PACKET_STARTS_WITH ("QEnvironmentHexEncoded:")) return eServerPacketType_QEnvironmentHexEncoded;
             break;
 
         case 'S':
-            if (PACKET_MATCHES ("QStartNoAckMode"))             return eServerPacketType_QStartNoAckMode;
-            else if (PACKET_STARTS_WITH ("QSetDisableASLR:"))   return eServerPacketType_QSetDisableASLR;
-            else if (PACKET_STARTS_WITH ("QSetSTDIN:"))         return eServerPacketType_QSetSTDIN;
-            else if (PACKET_STARTS_WITH ("QSetSTDOUT:"))        return eServerPacketType_QSetSTDOUT;
-            else if (PACKET_STARTS_WITH ("QSetSTDERR:"))        return eServerPacketType_QSetSTDERR;
-            else if (PACKET_STARTS_WITH ("QSetWorkingDir:"))    return eServerPacketType_QSetWorkingDir;
+            if (PACKET_MATCHES ("QStartNoAckMode"))               return eServerPacketType_QStartNoAckMode;
+            if (PACKET_STARTS_WITH ("QSaveRegisterState"))        return eServerPacketType_QSaveRegisterState;
+            if (PACKET_STARTS_WITH ("QSetDisableASLR:"))          return eServerPacketType_QSetDisableASLR;
+            if (PACKET_STARTS_WITH ("QSetSTDIN:"))                return eServerPacketType_QSetSTDIN;
+            if (PACKET_STARTS_WITH ("QSetSTDOUT:"))               return eServerPacketType_QSetSTDOUT;
+            if (PACKET_STARTS_WITH ("QSetSTDERR:"))               return eServerPacketType_QSetSTDERR;
+            if (PACKET_STARTS_WITH ("QSetWorkingDir:"))           return eServerPacketType_QSetWorkingDir;
+            if (PACKET_STARTS_WITH ("QSetLogging:"))              return eServerPacketType_QSetLogging;
+            if (PACKET_STARTS_WITH ("QSetMaxPacketSize:"))        return eServerPacketType_QSetMaxPacketSize;
+            if (PACKET_STARTS_WITH ("QSetMaxPayloadSize:"))       return eServerPacketType_QSetMaxPayloadSize;
+            if (PACKET_STARTS_WITH ("QSetEnableAsyncProfiling;")) return eServerPacketType_QSetEnableAsyncProfiling;
+            if (PACKET_STARTS_WITH ("QSyncThreadState:"))         return eServerPacketType_QSyncThreadState;
             break;
+
         case 'L':
-            if (PACKET_STARTS_WITH ("QLaunchArch:"))            return eServerPacketType_QLaunchArch;
+            if (PACKET_STARTS_WITH ("QLaunchArch:"))              return eServerPacketType_QLaunchArch;
+            if (PACKET_MATCHES("QListThreadsInStopReply"))        return eServerPacketType_QListThreadsInStopReply;
+            break;
+
+        case 'R':
+            if (PACKET_STARTS_WITH ("QRestoreRegisterState:"))    return eServerPacketType_QRestoreRegisterState;
+            break;
+
+        case 'T':
+            if (PACKET_MATCHES ("QThreadSuffixSupported"))        return eServerPacketType_QThreadSuffixSupported;
             break;
         }
         break;
@@ -105,10 +123,12 @@ StringExtractorGDBRemote::GetServerPacke
         {
         case 's':
             if (PACKET_MATCHES ("qsProcessInfo"))               return eServerPacketType_qsProcessInfo;
+            if (PACKET_MATCHES ("qsThreadInfo"))                return eServerPacketType_qsThreadInfo;
             break;
 
         case 'f':
             if (PACKET_STARTS_WITH ("qfProcessInfo"))           return eServerPacketType_qfProcessInfo;
+            if (PACKET_STARTS_WITH ("qfThreadInfo"))            return eServerPacketType_qfThreadInfo;
             break;
 
         case 'C':
@@ -118,6 +138,9 @@ StringExtractorGDBRemote::GetServerPacke
         case 'G':
             if (PACKET_STARTS_WITH ("qGroupName:"))             return eServerPacketType_qGroupName;
             if (PACKET_MATCHES ("qGetWorkingDir"))              return eServerPacketType_qGetWorkingDir;
+            if (PACKET_MATCHES ("qGetPid"))                     return eServerPacketType_qGetPid;
+            if (PACKET_STARTS_WITH ("qGetProfileData;"))        return eServerPacketType_qGetProfileData;
+            if (PACKET_MATCHES ("qGDBServerVersion"))           return eServerPacketType_qGDBServerVersion;
             break;
 
         case 'H':
@@ -133,21 +156,48 @@ StringExtractorGDBRemote::GetServerPacke
             if (PACKET_MATCHES ("qLaunchSuccess"))              return eServerPacketType_qLaunchSuccess;
             break;
             
+        case 'M':
+            if (PACKET_STARTS_WITH ("qMemoryRegionInfo:"))      return eServerPacketType_qMemoryRegionInfo;
+            if (PACKET_MATCHES ("qMemoryRegionInfo"))           return eServerPacketType_qMemoryRegionInfoSupported;
+            break;
+
         case 'P':
             if (PACKET_STARTS_WITH ("qProcessInfoPID:"))        return eServerPacketType_qProcessInfoPID;
-            if (PACKET_STARTS_WITH ("qPlatform_shell:"))   return eServerPacketType_qPlatform_shell;
+            if (PACKET_STARTS_WITH ("qPlatform_shell:"))        return eServerPacketType_qPlatform_shell;
             if (PACKET_STARTS_WITH ("qPlatform_mkdir:"))        return eServerPacketType_qPlatform_mkdir;
             if (PACKET_STARTS_WITH ("qPlatform_chmod:"))        return eServerPacketType_qPlatform_chmod;
+            if (PACKET_MATCHES ("qProcessInfo"))                return eServerPacketType_qProcessInfo;
             break;
                 
+        case 'R':
+            if (PACKET_STARTS_WITH ("qRcmd,"))                  return eServerPacketType_qRcmd;
+            if (PACKET_STARTS_WITH ("qRegisterInfo"))           return eServerPacketType_qRegisterInfo;
+            break;
 
         case 'S':
             if (PACKET_STARTS_WITH ("qSpeedTest:"))             return eServerPacketType_qSpeedTest;
+            if (PACKET_MATCHES ("qShlibInfoAddr"))              return eServerPacketType_qShlibInfoAddr;
+            if (PACKET_MATCHES ("qStepPacketSupported"))        return eServerPacketType_qStepPacketSupported;
+            if (PACKET_MATCHES ("qSyncThreadStateSupported"))   return eServerPacketType_qSyncThreadStateSupported;
+            break;
+
+        case 'T':
+            if (PACKET_STARTS_WITH ("qThreadExtraInfo,"))       return eServerPacketType_qThreadExtraInfo;
+            if (PACKET_STARTS_WITH ("qThreadStopInfo"))         return eServerPacketType_qThreadStopInfo;
             break;
 
         case 'U':
             if (PACKET_STARTS_WITH ("qUserName:"))              return eServerPacketType_qUserName;
             break;
+
+        case 'V':
+            if (PACKET_MATCHES ("qVAttachOrWaitSupported"))     return eServerPacketType_qVAttachOrWaitSupported;
+            break;
+
+        case 'W':
+            if (PACKET_STARTS_WITH ("qWatchpointSupportInfo:")) return eServerPacketType_qWatchpointSupportInfo;
+            if (PACKET_MATCHES ("qWatchpointSupportInfo"))      return eServerPacketType_qWatchpointSupportInfoSupported;
+            break;
         }
         break;
     case 'v':
@@ -165,8 +215,85 @@ StringExtractorGDBRemote::GetServerPacke
                 else if (PACKET_STARTS_WITH("vFile:symlink"))   return eServerPacketType_vFile_symlink;
                 else if (PACKET_STARTS_WITH("vFile:unlink"))    return eServerPacketType_vFile_unlink;
 
+            } else {
+              if (PACKET_STARTS_WITH ("vAttach;"))              return eServerPacketType_vAttach;
+              if (PACKET_STARTS_WITH ("vAttachWait;"))          return eServerPacketType_vAttachWait;
+              if (PACKET_STARTS_WITH ("vAttachOrWait;"))        return eServerPacketType_vAttachOrWait;
+              if (PACKET_STARTS_WITH ("vAttachName;"))          return eServerPacketType_vAttachName;
+              if (PACKET_STARTS_WITH("vCont;"))                 return eServerPacketType_vCont;
+              if (PACKET_MATCHES ("vCont?"))                    return eServerPacketType_vCont_actions;
             }
             break;
+      case '_':
+        switch (packet_cstr[1])
+        {
+        case 'M':
+            return eServerPacketType__M;
+
+        case 'm':
+            return eServerPacketType__m;
+        }
+        break;
+
+      case '?':
+        if (packet_size == 1) return eServerPacketType_stop_reason;
+        break;
+
+      case 'c':
+        return eServerPacketType_c;
+
+      case 'C':
+        return eServerPacketType_C;
+
+      case 'D':
+        if (packet_size == 1) return eServerPacketType_D;
+        break;
+
+      case 'g':
+        if (packet_size == 1) return eServerPacketType_g;
+        break;
+
+      case 'G':
+        return eServerPacketType_G;
+
+      case 'H':
+        return eServerPacketType_H;
+
+      case 'k':
+        if (packet_size == 1) return eServerPacketType_k;
+        break;
+
+      case 'm':
+        return eServerPacketType_m;
+
+      case 'M':
+        return eServerPacketType_M;
+
+      case 'p':
+        return eServerPacketType_p;
+
+      case 'P':
+        return eServerPacketType_P;
+
+      case 's':
+        if (packet_size == 1) return eServerPacketType_s;
+        break;
+
+      case 'S':
+        return eServerPacketType_S;
+
+      case 'T':
+        return eServerPacketType_T;
+
+      case 'z':
+        if (packet_cstr[1] >= '0' && packet_cstr[1] <= '4')
+          return eServerPacketType_z;
+        break;
+
+      case 'Z':
+        if (packet_cstr[1] >= '0' && packet_cstr[1] <= '4')
+          return eServerPacketType_Z;
+        break;
     }
     return eServerPacketType_unimplemented;
 }

Modified: lldb/trunk/source/Utility/StringExtractorGDBRemote.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Utility/StringExtractorGDBRemote.h?rev=196525&r1=196524&r2=196525&view=diff
==============================================================================
--- lldb/trunk/source/Utility/StringExtractorGDBRemote.h (original)
+++ lldb/trunk/source/Utility/StringExtractorGDBRemote.h Thu Dec  5 13:25:45 2013
@@ -80,7 +80,66 @@ public:
         eServerPacketType_vFile_md5,
         eServerPacketType_vFile_stat,
         eServerPacketType_vFile_symlink,
-        eServerPacketType_vFile_unlink
+        eServerPacketType_vFile_unlink,
+      // debug server packages
+        eServerPacketType_QEnvironmentHexEncoded,
+        eServerPacketType_QListThreadsInStopReply,
+        eServerPacketType_QRestoreRegisterState,
+        eServerPacketType_QSaveRegisterState,
+        eServerPacketType_QSetLogging,
+        eServerPacketType_QSetMaxPacketSize,
+        eServerPacketType_QSetMaxPayloadSize,
+        eServerPacketType_QSetEnableAsyncProfiling,
+        eServerPacketType_QSyncThreadState,
+        eServerPacketType_QThreadSuffixSupported,
+
+        eServerPacketType_qsThreadInfo,
+        eServerPacketType_qfThreadInfo,
+        eServerPacketType_qGetPid,
+        eServerPacketType_qGetProfileData,
+        eServerPacketType_qGDBServerVersion,
+        eServerPacketType_qMemoryRegionInfo,
+        eServerPacketType_qMemoryRegionInfoSupported,
+        eServerPacketType_qProcessInfo,
+        eServerPacketType_qRcmd,
+        eServerPacketType_qRegisterInfo,
+        eServerPacketType_qShlibInfoAddr,
+        eServerPacketType_qStepPacketSupported,
+        eServerPacketType_qSyncThreadStateSupported,
+        eServerPacketType_qThreadExtraInfo,
+        eServerPacketType_qThreadStopInfo,
+        eServerPacketType_qVAttachOrWaitSupported,
+        eServerPacketType_qWatchpointSupportInfo,
+        eServerPacketType_qWatchpointSupportInfoSupported,
+
+        eServerPacketType_vAttach,
+        eServerPacketType_vAttachWait,
+        eServerPacketType_vAttachOrWait,
+        eServerPacketType_vAttachName,
+        eServerPacketType_vCont,
+        eServerPacketType_vCont_actions, // vCont?
+
+        eServerPacketType_stop_reason, // '?'
+
+        eServerPacketType_c,
+        eServerPacketType_C,
+        eServerPacketType_D,
+        eServerPacketType_g,
+        eServerPacketType_G,
+        eServerPacketType_H,
+        eServerPacketType_k,
+        eServerPacketType_m,
+        eServerPacketType_M,
+        eServerPacketType_p,
+        eServerPacketType_P,
+        eServerPacketType_s,
+        eServerPacketType_S,
+        eServerPacketType_T,
+        eServerPacketType_Z,
+        eServerPacketType_z,
+
+        eServerPacketType__M,
+        eServerPacketType__m,
     };
     
     ServerPacketType





More information about the lldb-commits mailing list