diff options
Diffstat (limited to 'lldb/source/Plugins/Process/MacOSX-Kernel/CommunicationKDP.h')
| -rw-r--r-- | lldb/source/Plugins/Process/MacOSX-Kernel/CommunicationKDP.h | 99 | 
1 files changed, 66 insertions, 33 deletions
| diff --git a/lldb/source/Plugins/Process/MacOSX-Kernel/CommunicationKDP.h b/lldb/source/Plugins/Process/MacOSX-Kernel/CommunicationKDP.h index ee626a69824..c04083c2028 100644 --- a/lldb/source/Plugins/Process/MacOSX-Kernel/CommunicationKDP.h +++ b/lldb/source/Plugins/Process/MacOSX-Kernel/CommunicationKDP.h @@ -33,6 +33,53 @@ public:      {          eBroadcastBitRunPacketSent = kLoUserBroadcastBit      }; +     +    const static uint32_t kMaxPacketSize = 1200; +    const static uint32_t kMaxDataSize = 1024; +     +    typedef enum  +    { +        eRequestTypeConnect = 0u, +        eRequestTypeDisconnect, +        eRequestTypeHostInfo, +        eRequestTypeVersion, +        eRequestTypeMaxBytes, +        eRequestTypeReadMemory, +        eRequestTypeWriteMemory, +        eRequestTypeReadRegisters, +        eRequestTypeWriteRegisters, +        eRequestTypeLoad, +        eRequestTypeImagePath, +        eRequestTypeSuspend, +        eRequestTypeResume, +        eRequestTypeException, +        eRequestTypeTermination, +        eRequestTypeBreakpointSet, +        eRequestTypeBreakpointRemove, +        eRequestTypeRegions, +        eRequestTypeReattach, +        eRequestTypeHostReboot, +        eRequestTypeReadMemory64, +        eRequestTypeWriteMemory64, +        eRequestTypeBreakpointSet64, +        eRequestTypeBreakpointRemove64, +        eRequestTypeKernelVersion +    } RequestType; + +    typedef enum  +    { +        eErrorSuccess = 0, +        eErrorAlreadyConnected, +        eErrorPacketToBig, +        eErrorInvalidRegisterFlavor, +        eErrorUnimplemented +    } ErrorType; +     +    typedef enum +    { +        ePacketTypeRequest  = 0u, +        ePacketTypeReply    = 1u +    } PacketType;      //------------------------------------------------------------------      // Constructors and Destructors      //------------------------------------------------------------------ @@ -41,34 +88,14 @@ public:      virtual      ~CommunicationKDP(); -    size_t -    SendPacket (const char *payload); - -    size_t -    SendPacket (const char *payload, -                size_t payload_length); - -    size_t -    SendPacket (lldb_private::StreamString &response); +    bool +    SendRequestPacket (const lldb_private::StreamString &request_packet);      // Wait for a packet within 'nsec' seconds      size_t      WaitForPacketWithTimeoutMicroSeconds (StringExtractor &response,                                            uint32_t usec); -    char -    GetAck (); - -    size_t -    SendAck (); - -    size_t -    SendNack (); - -    char -    CalculcateChecksum (const char *payload, -                        size_t payload_length); -      bool      GetSequenceMutex(lldb_private::Mutex::Locker& locker); @@ -82,12 +109,6 @@ public:          return m_public_is_running.GetValue();      } -    bool -    GetSendAcks () -    { -        return m_send_acks; -    } -      //------------------------------------------------------------------      // Set the global packet timeout.      // @@ -119,12 +140,19 @@ public:                               lldb_private::ProcessLaunchInfo &launch_info);  +    ErrorType +    Connect (uint16_t reply_port,  +             uint16_t exc_port,  +             const char *greeting); + +    ErrorType +    Disconnect (); +  protected:      typedef std::list<std::string> packet_collection; -    size_t -    SendPacketNoLock (const char *payload,  -                      size_t payload_length); +    bool +    SendRequestPacketNoLock (const lldb_private::StreamString &request_packet);      size_t      WaitForPacketWithTimeoutMicroSecondsNoLock (StringExtractor &response,  @@ -133,6 +161,10 @@ protected:      bool      WaitForNotRunningPrivate (const lldb_private::TimeValue *timeout_ptr); +    void +    MakeRequestPacketHeader (RequestType request_type,  +                             lldb_private::StreamString &request_packet); +      //------------------------------------------------------------------      // Classes that inherit from CommunicationKDP can see and modify these      //------------------------------------------------------------------ @@ -140,8 +172,9 @@ protected:      lldb_private::Mutex m_sequence_mutex;    // Restrict access to sending/receiving packets to a single thread at a time      lldb_private::Predicate<bool> m_public_is_running;      lldb_private::Predicate<bool> m_private_is_running; -    bool m_send_acks; - +    uint32_t m_session_key; +    uint8_t m_request_sequence_id; +    uint8_t m_exception_sequence_id;  private:      //------------------------------------------------------------------      // For CommunicationKDP only | 

