summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/Process/MacOSX-Kernel/CommunicationKDP.h
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Plugins/Process/MacOSX-Kernel/CommunicationKDP.h')
-rw-r--r--lldb/source/Plugins/Process/MacOSX-Kernel/CommunicationKDP.h99
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
OpenPOWER on IntegriCloud