[Lldb-commits] [lldb] r135652 - in /lldb/trunk/source/Plugins: DynamicLoader/MacOSX-Kernel/DynamicLoaderMacOSXKernel.cpp Process/MacOSX-Kernel/CommunicationKDP.cpp Process/MacOSX-Kernel/CommunicationKDP.h Process/MacOSX-Kernel/ProcessKDP.cpp
Greg Clayton
gclayton at apple.com
Wed Jul 20 18:12:01 PDT 2011
Author: gclayton
Date: Wed Jul 20 20:12:01 2011
New Revision: 135652
URL: http://llvm.org/viewvc/llvm-project?rev=135652&view=rev
Log:
More KDP fixes and logging cleanup.
Modified:
lldb/trunk/source/Plugins/DynamicLoader/MacOSX-Kernel/DynamicLoaderMacOSXKernel.cpp
lldb/trunk/source/Plugins/Process/MacOSX-Kernel/CommunicationKDP.cpp
lldb/trunk/source/Plugins/Process/MacOSX-Kernel/CommunicationKDP.h
lldb/trunk/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp
Modified: lldb/trunk/source/Plugins/DynamicLoader/MacOSX-Kernel/DynamicLoaderMacOSXKernel.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/DynamicLoader/MacOSX-Kernel/DynamicLoaderMacOSXKernel.cpp?rev=135652&r1=135651&r2=135652&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/DynamicLoader/MacOSX-Kernel/DynamicLoaderMacOSXKernel.cpp (original)
+++ lldb/trunk/source/Plugins/DynamicLoader/MacOSX-Kernel/DynamicLoaderMacOSXKernel.cpp Wed Jul 20 20:12:01 2011
@@ -525,6 +525,14 @@
ParseLoadCommands (data, kext_summaries[i]);
}
+ if (s)
+ {
+ if (kext_summaries[i].module_sp)
+ s->Printf(" found kext: %s/%s\n",
+ kext_summaries[i].module_sp->GetFileSpec().GetDirectory().AsCString(),
+ kext_summaries[i].module_sp->GetFileSpec().GetFilename().AsCString());
+ }
+
if (log)
kext_summaries[i].PutToLog (log.get());
}
@@ -599,6 +607,11 @@
const size_t count = image_infos.size() * m_kext_summary_header.entry_size;
DataBufferHeap data(count, 0);
Error error;
+
+ Stream *s = &m_process->GetTarget().GetDebugger().GetOutputStream();
+
+ if (s)
+ s->Printf ("Reading %u kext summaries...\n", image_infos_count);
const bool prefer_file_cache = false;
const size_t bytes_read = m_process->GetTarget().ReadMemory (kext_summary_addr,
prefer_file_cache,
Modified: lldb/trunk/source/Plugins/Process/MacOSX-Kernel/CommunicationKDP.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/MacOSX-Kernel/CommunicationKDP.cpp?rev=135652&r1=135651&r2=135652&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/MacOSX-Kernel/CommunicationKDP.cpp (original)
+++ lldb/trunk/source/Plugins/Process/MacOSX-Kernel/CommunicationKDP.cpp Wed Jul 20 20:12:01 2011
@@ -44,7 +44,6 @@
m_byte_order (eByteOrderLittle),
m_packet_timeout (1),
m_sequence_mutex (Mutex::eMutexTypeRecursive),
- m_public_is_running (false),
m_private_is_running (false),
m_session_key (0u),
m_request_sequence_id (0u),
@@ -259,31 +258,31 @@
uint8_t reply_command = packet.GetU8(&offset);
switch (reply_command)
{
- case ePacketTypeReply | eCommandTypeConnect:
- case ePacketTypeReply | eCommandTypeDisconnect:
- case ePacketTypeReply | eCommandTypeHostInfo:
- case ePacketTypeReply | eCommandTypeVersion:
- case ePacketTypeReply | eCommandTypeMaxBytes:
- case ePacketTypeReply | eCommandTypeReadMemory:
- case ePacketTypeReply | eCommandTypeWriteMemory:
- case ePacketTypeReply | eCommandTypeReadRegisters:
- case ePacketTypeReply | eCommandTypeWriteRegisters:
- case ePacketTypeReply | eCommandTypeLoad:
- case ePacketTypeReply | eCommandTypeImagePath:
- case ePacketTypeReply | eCommandTypeSuspend:
- case ePacketTypeReply | eCommandTypeResume:
- case ePacketTypeReply | eCommandTypeException:
- case ePacketTypeReply | eCommandTypeTermination:
- case ePacketTypeReply | eCommandTypeBreakpointSet:
- case ePacketTypeReply | eCommandTypeBreakpointRemove:
- case ePacketTypeReply | eCommandTypeRegions:
- case ePacketTypeReply | eCommandTypeReattach:
- case ePacketTypeReply | eCommandTypeHostReboot:
- case ePacketTypeReply | eCommandTypeReadMemory64:
- case ePacketTypeReply | eCommandTypeWriteMemory64:
- case ePacketTypeReply | eCommandTypeBreakpointSet64:
- case ePacketTypeReply | eCommandTypeBreakpointRemove64:
- case ePacketTypeReply | eCommandTypeKernelVersion:
+ case ePacketTypeReply | KDP_CONNECT:
+ case ePacketTypeReply | KDP_DISCONNECT:
+ case ePacketTypeReply | KDP_HOSTINFO:
+ case ePacketTypeReply | KDP_VERSION:
+ case ePacketTypeReply | KDP_MAXBYTES:
+ case ePacketTypeReply | KDP_READMEM:
+ case ePacketTypeReply | KDP_WRITEMEM:
+ case ePacketTypeReply | KDP_READREGS:
+ case ePacketTypeReply | KDP_WRITEREGS:
+ case ePacketTypeReply | KDP_LOAD:
+ case ePacketTypeReply | KDP_IMAGEPATH:
+ case ePacketTypeReply | KDP_SUSPEND:
+ case ePacketTypeReply | KDP_RESUMECPUS:
+ case ePacketTypeReply | KDP_EXCEPTION:
+ case ePacketTypeReply | KDP_TERMINATION:
+ case ePacketTypeReply | KDP_BREAKPOINT_SET:
+ case ePacketTypeReply | KDP_BREAKPOINT_REMOVE:
+ case ePacketTypeReply | KDP_REGIONS:
+ case ePacketTypeReply | KDP_REATTACH:
+ case ePacketTypeReply | KDP_HOSTREBOOT:
+ case ePacketTypeReply | KDP_READMEM64:
+ case ePacketTypeReply | KDP_WRITEMEM64:
+ case ePacketTypeReply | KDP_BREAKPOINT_SET64:
+ case ePacketTypeReply | KDP_BREAKPOINT_REMOVE64:
+ case ePacketTypeReply | KDP_KERNELVERSION:
{
offset = 2;
const uint16_t length = packet.GetU16 (&offset);
@@ -331,7 +330,7 @@
if (greeting == NULL)
greeting = "";
- const CommandType command = eCommandTypeConnect;
+ const CommandType command = KDP_CONNECT;
// Length is 82 uint16_t and the length of the greeting C string with the terminating NULL
const uint32_t command_length = 8 + 2 + 2 + ::strlen(greeting) + 1;
const uint32_t request_sequence_id = m_request_sequence_id;
@@ -361,7 +360,7 @@
CommunicationKDP::SendRequestReattach (uint16_t reply_port)
{
PacketStreamType request_packet (Stream::eBinary, m_addr_byte_size, m_byte_order);
- const CommandType command = eCommandTypeReattach;
+ const CommandType command = KDP_REATTACH;
// Length is 8 bytes for the header plus 2 bytes for the reply UDP port
const uint32_t command_length = 8 + 2;
const uint32_t request_sequence_id = m_request_sequence_id;
@@ -402,7 +401,7 @@
CommunicationKDP::SendRequestVersion ()
{
PacketStreamType request_packet (Stream::eBinary, m_addr_byte_size, m_byte_order);
- const CommandType command = eCommandTypeVersion;
+ const CommandType command = KDP_VERSION;
const uint32_t command_length = 8;
const uint32_t request_sequence_id = m_request_sequence_id;
MakeRequestPacketHeader (command, request_packet, command_length);
@@ -417,6 +416,35 @@
return false;
}
+#if 0 // Disable KDP_IMAGEPATH for now, it seems to hang the KDP connection...
+const char *
+CommunicationKDP::GetImagePath ()
+{
+ if (m_image_path.empty())
+ SendRequestImagePath();
+ return m_image_path.c_str();
+}
+
+bool
+CommunicationKDP::SendRequestImagePath ()
+{
+ PacketStreamType request_packet (Stream::eBinary, m_addr_byte_size, m_byte_order);
+ const CommandType command = KDP_IMAGEPATH;
+ const uint32_t command_length = 8;
+ const uint32_t request_sequence_id = m_request_sequence_id;
+ MakeRequestPacketHeader (command, request_packet, command_length);
+ DataExtractor reply_packet;
+ if (SendRequestAndGetReply (command, request_sequence_id, request_packet, reply_packet))
+ {
+ const char *path = reply_packet.PeekCStr(8);
+ if (path && path[0])
+ m_kernel_version.assign (path);
+ return true;
+ }
+ return false;
+}
+#endif
+
uint32_t
CommunicationKDP::GetCPUMask ()
{
@@ -445,7 +473,7 @@
CommunicationKDP::SendRequestHostInfo ()
{
PacketStreamType request_packet (Stream::eBinary, m_addr_byte_size, m_byte_order);
- const CommandType command = eCommandTypeHostInfo;
+ const CommandType command = KDP_HOSTINFO;
const uint32_t command_length = 8;
const uint32_t request_sequence_id = m_request_sequence_id;
MakeRequestPacketHeader (command, request_packet, command_length);
@@ -481,7 +509,7 @@
CommunicationKDP::SendRequestKernelVersion ()
{
PacketStreamType request_packet (Stream::eBinary, m_addr_byte_size, m_byte_order);
- const CommandType command = eCommandTypeKernelVersion;
+ const CommandType command = KDP_KERNELVERSION;
const uint32_t command_length = 8;
const uint32_t request_sequence_id = m_request_sequence_id;
MakeRequestPacketHeader (command, request_packet, command_length);
@@ -500,7 +528,7 @@
CommunicationKDP::SendRequestDisconnect ()
{
PacketStreamType request_packet (Stream::eBinary, m_addr_byte_size, m_byte_order);
- const CommandType command = eCommandTypeDisconnect;
+ const CommandType command = KDP_DISCONNECT;
const uint32_t command_length = 8;
const uint32_t request_sequence_id = m_request_sequence_id;
MakeRequestPacketHeader (command, request_packet, command_length);
@@ -522,7 +550,7 @@
PacketStreamType request_packet (Stream::eBinary, m_addr_byte_size, m_byte_order);
bool use_64 = (GetVersion() >= 11);
uint32_t command_addr_byte_size = use_64 ? 8 : 4;
- const CommandType command = use_64 ? eCommandTypeReadMemory64 : eCommandTypeReadMemory;
+ const CommandType command = use_64 ? KDP_READMEM64 : KDP_READMEM;
// Size is header + address size + uint32_t length
const uint32_t command_length = 8 + command_addr_byte_size + 4;
const uint32_t request_sequence_id = m_request_sequence_id;
@@ -564,7 +592,7 @@
PacketStreamType request_packet (Stream::eBinary, m_addr_byte_size, m_byte_order);
bool use_64 = (GetVersion() >= 11);
uint32_t command_addr_byte_size = use_64 ? 8 : 4;
- const CommandType command = use_64 ? eCommandTypeWriteMemory64 : eCommandTypeWriteMemory;
+ const CommandType command = use_64 ? KDP_WRITEMEM64 : KDP_WRITEMEM;
// Size is header + address size + uint32_t length
const uint32_t command_length = 8 + command_addr_byte_size + 4;
const uint32_t request_sequence_id = m_request_sequence_id;
@@ -594,31 +622,31 @@
{
switch (command)
{
- case eCommandTypeConnect: return "KDP_CONNECT";
- case eCommandTypeDisconnect: return "KDP_DISCONNECT";
- case eCommandTypeHostInfo: return "KDP_HOSTINFO";
- case eCommandTypeVersion: return "KDP_VERSION";
- case eCommandTypeMaxBytes: return "KDP_MAXBYTES";
- case eCommandTypeReadMemory: return "KDP_READMEM";
- case eCommandTypeWriteMemory: return "KDP_WRITEMEM";
- case eCommandTypeReadRegisters: return "KDP_READREGS";
- case eCommandTypeWriteRegisters: return "KDP_WRITEREGS";
- case eCommandTypeLoad: return "KDP_LOAD";
- case eCommandTypeImagePath: return "KDP_IMAGEPATH";
- case eCommandTypeSuspend: return "KDP_SUSPEND";
- case eCommandTypeResume: return "KDP_RESUMECPUS";
- case eCommandTypeException: return "KDP_EXCEPTION";
- case eCommandTypeTermination: return "KDP_TERMINATION";
- case eCommandTypeBreakpointSet: return "KDP_BREAKPOINT_SET";
- case eCommandTypeBreakpointRemove: return "KDP_BREAKPOINT_REMOVE";
- case eCommandTypeRegions: return "KDP_REGIONS";
- case eCommandTypeReattach: return "KDP_REATTACH";
- case eCommandTypeHostReboot: return "KDP_HOSTREBOOT";
- case eCommandTypeReadMemory64: return "KDP_READMEM64";
- case eCommandTypeWriteMemory64: return "KDP_WRITEMEM64";
- case eCommandTypeBreakpointSet64: return "KDP_BREAKPOINT64_SET";
- case eCommandTypeBreakpointRemove64: return "KDP_BREAKPOINT64_REMOVE";
- case eCommandTypeKernelVersion: return "KDP_KERNELVERSION";
+ case KDP_CONNECT: return "KDP_CONNECT";
+ case KDP_DISCONNECT: return "KDP_DISCONNECT";
+ case KDP_HOSTINFO: return "KDP_HOSTINFO";
+ case KDP_VERSION: return "KDP_VERSION";
+ case KDP_MAXBYTES: return "KDP_MAXBYTES";
+ case KDP_READMEM: return "KDP_READMEM";
+ case KDP_WRITEMEM: return "KDP_WRITEMEM";
+ case KDP_READREGS: return "KDP_READREGS";
+ case KDP_WRITEREGS: return "KDP_WRITEREGS";
+ case KDP_LOAD: return "KDP_LOAD";
+ case KDP_IMAGEPATH: return "KDP_IMAGEPATH";
+ case KDP_SUSPEND: return "KDP_SUSPEND";
+ case KDP_RESUMECPUS: return "KDP_RESUMECPUS";
+ case KDP_EXCEPTION: return "KDP_EXCEPTION";
+ case KDP_TERMINATION: return "KDP_TERMINATION";
+ case KDP_BREAKPOINT_SET: return "KDP_BREAKPOINT_SET";
+ case KDP_BREAKPOINT_REMOVE: return "KDP_BREAKPOINT_REMOVE";
+ case KDP_REGIONS: return "KDP_REGIONS";
+ case KDP_REATTACH: return "KDP_REATTACH";
+ case KDP_HOSTREBOOT: return "KDP_HOSTREBOOT";
+ case KDP_READMEM64: return "KDP_READMEM64";
+ case KDP_WRITEMEM64: return "KDP_WRITEMEM64";
+ case KDP_BREAKPOINT_SET64: return "KDP_BREAKPOINT64_SET";
+ case KDP_BREAKPOINT_REMOVE64: return "KDP_BREAKPOINT64_REMOVE";
+ case KDP_KERNELVERSION: return "KDP_KERNELVERSION";
}
return NULL;
}
@@ -663,33 +691,33 @@
switch (command)
{
// Commands that return a single 32 bit error
- case eCommandTypeConnect:
- case eCommandTypeWriteMemory:
- case eCommandTypeWriteMemory64:
- case eCommandTypeBreakpointSet:
- case eCommandTypeBreakpointRemove:
- case eCommandTypeBreakpointSet64:
- case eCommandTypeBreakpointRemove64:
- case eCommandTypeWriteRegisters:
- case eCommandTypeLoad:
+ case KDP_CONNECT:
+ case KDP_WRITEMEM:
+ case KDP_WRITEMEM64:
+ case KDP_BREAKPOINT_SET:
+ case KDP_BREAKPOINT_REMOVE:
+ case KDP_BREAKPOINT_SET64:
+ case KDP_BREAKPOINT_REMOVE64:
+ case KDP_WRITEREGS:
+ case KDP_LOAD:
{
const uint32_t error = packet.GetU32 (&offset);
s.Printf(" (error=0x%8.8x)", error);
}
break;
- case eCommandTypeDisconnect:
- case eCommandTypeReattach:
- case eCommandTypeHostReboot:
- case eCommandTypeSuspend:
- case eCommandTypeResume:
- case eCommandTypeException:
- case eCommandTypeTermination:
+ case KDP_DISCONNECT:
+ case KDP_REATTACH:
+ case KDP_HOSTREBOOT:
+ case KDP_SUSPEND:
+ case KDP_RESUMECPUS:
+ case KDP_EXCEPTION:
+ case KDP_TERMINATION:
// No return value for the reply, just the header to ack
s.PutCString(" ()");
break;
- case eCommandTypeHostInfo:
+ case KDP_HOSTINFO:
{
const uint32_t cpu_mask = packet.GetU32 (&offset);
const uint32_t cpu_type = packet.GetU32 (&offset);
@@ -698,7 +726,7 @@
}
break;
- case eCommandTypeVersion:
+ case KDP_VERSION:
{
const uint32_t version = packet.GetU32 (&offset);
const uint32_t feature = packet.GetU32 (&offset);
@@ -706,7 +734,7 @@
}
break;
- case eCommandTypeRegions:
+ case KDP_REGIONS:
{
const uint32_t region_count = packet.GetU32 (&offset);
s.Printf(" (count = %u", region_count);
@@ -720,8 +748,8 @@
}
break;
- case eCommandTypeReadMemory:
- case eCommandTypeReadMemory64:
+ case KDP_READMEM:
+ case KDP_READMEM64:
{
const uint32_t error = packet.GetU32 (&offset);
const uint32_t count = packet.GetByteSize() - offset;
@@ -738,7 +766,7 @@
}
break;
- case eCommandTypeReadRegisters:
+ case KDP_READREGS:
{
const uint32_t error = packet.GetU32 (&offset);
const uint32_t count = packet.GetByteSize() - offset;
@@ -755,20 +783,20 @@
}
break;
- case eCommandTypeKernelVersion:
+ case KDP_KERNELVERSION:
{
const char *kernel_version = packet.PeekCStr(8);
s.Printf(" (version = \"%s\")", kernel_version);
}
break;
- case eCommandTypeMaxBytes:
+ case KDP_MAXBYTES:
{
const uint32_t max_bytes = packet.GetU32 (&offset);
s.Printf(" (max_bytes = 0x%8.8x (%u))", max_bytes, max_bytes);
}
break;
- case eCommandTypeImagePath:
+ case KDP_IMAGEPATH:
{
const char *path = packet.GetCStr(&offset);
s.Printf(" (path = \"%s\")", path);
@@ -785,7 +813,7 @@
// Dump request packets
switch (command)
{
- case eCommandTypeConnect:
+ case KDP_CONNECT:
{
const uint16_t reply_port = packet.GetU16 (&offset);
const uint16_t exc_port = packet.GetU16 (&offset);
@@ -793,27 +821,27 @@
}
break;
- case eCommandTypeDisconnect:
- case eCommandTypeHostReboot:
- case eCommandTypeHostInfo:
- case eCommandTypeVersion:
- case eCommandTypeRegions:
- case eCommandTypeKernelVersion:
- case eCommandTypeMaxBytes:
- case eCommandTypeImagePath:
- case eCommandTypeSuspend:
+ case KDP_DISCONNECT:
+ case KDP_HOSTREBOOT:
+ case KDP_HOSTINFO:
+ case KDP_VERSION:
+ case KDP_REGIONS:
+ case KDP_KERNELVERSION:
+ case KDP_MAXBYTES:
+ case KDP_IMAGEPATH:
+ case KDP_SUSPEND:
// No args, just the header in the request...
s.PutCString(" ()");
break;
- case eCommandTypeResume:
+ case KDP_RESUMECPUS:
{
const uint32_t cpu_mask = packet.GetU32 (&offset);
s.Printf(" (cpu_mask = 0x%8.8x)", cpu_mask);
}
break;
- case eCommandTypeReadMemory:
+ case KDP_READMEM:
{
const uint32_t addr = packet.GetU32 (&offset);
const uint32_t size = packet.GetU32 (&offset);
@@ -822,7 +850,7 @@
}
break;
- case eCommandTypeWriteMemory:
+ case KDP_WRITEMEM:
{
const uint32_t addr = packet.GetU32 (&offset);
const uint32_t size = packet.GetU32 (&offset);
@@ -832,7 +860,7 @@
}
break;
- case eCommandTypeReadMemory64:
+ case KDP_READMEM64:
{
const uint64_t addr = packet.GetU64 (&offset);
const uint32_t size = packet.GetU32 (&offset);
@@ -841,7 +869,7 @@
}
break;
- case eCommandTypeWriteMemory64:
+ case KDP_WRITEMEM64:
{
const uint64_t addr = packet.GetU64 (&offset);
const uint32_t size = packet.GetU32 (&offset);
@@ -851,7 +879,7 @@
}
break;
- case eCommandTypeReadRegisters:
+ case KDP_READREGS:
{
const uint32_t cpu = packet.GetU32 (&offset);
const uint32_t flavor = packet.GetU32 (&offset);
@@ -859,7 +887,7 @@
}
break;
- case eCommandTypeWriteRegisters:
+ case KDP_WRITEREGS:
{
const uint32_t cpu = packet.GetU32 (&offset);
const uint32_t flavor = packet.GetU32 (&offset);
@@ -878,16 +906,16 @@
break;
- case eCommandTypeBreakpointSet:
- case eCommandTypeBreakpointRemove:
+ case KDP_BREAKPOINT_SET:
+ case KDP_BREAKPOINT_REMOVE:
{
const uint32_t addr = packet.GetU32 (&offset);
s.Printf(" (addr = 0x%8.8x)", addr);
}
break;
- case eCommandTypeBreakpointSet64:
- case eCommandTypeBreakpointRemove64:
+ case KDP_BREAKPOINT_SET64:
+ case KDP_BREAKPOINT_REMOVE64:
{
const uint64_t addr = packet.GetU64 (&offset);
s.Printf(" (addr = 0x%16.16llx)", addr);
@@ -895,14 +923,14 @@
break;
- case eCommandTypeLoad:
+ case KDP_LOAD:
{
const char *path = packet.GetCStr(&offset);
s.Printf(" (path = \"%s\")", path);
}
break;
- case eCommandTypeException:
+ case KDP_EXCEPTION:
{
const uint32_t count = packet.GetU32 (&offset);
@@ -936,7 +964,7 @@
}
break;
- case eCommandTypeTermination:
+ case KDP_TERMINATION:
{
const uint32_t term_code = packet.GetU32 (&offset);
const uint32_t exit_code = packet.GetU32 (&offset);
@@ -944,7 +972,7 @@
}
break;
- case eCommandTypeReattach:
+ case KDP_REATTACH:
{
const uint16_t reply_port = packet.GetU16 (&offset);
s.Printf(" (reply_port=%u)", reply_port);
@@ -982,7 +1010,7 @@
Error &error)
{
PacketStreamType request_packet (Stream::eBinary, m_addr_byte_size, m_byte_order);
- const CommandType command = eCommandTypeReadRegisters;
+ const CommandType command = KDP_READREGS;
// Size is header + 4 byte cpu and 4 byte flavor
const uint32_t command_length = 8 + 4 + 4;
const uint32_t request_sequence_id = m_request_sequence_id;
@@ -1024,7 +1052,7 @@
if (cpu_mask == 0)
cpu_mask = GetCPUMask();
PacketStreamType request_packet (Stream::eBinary, m_addr_byte_size, m_byte_order);
- const CommandType command = eCommandTypeResume;
+ const CommandType command = KDP_RESUMECPUS;
const uint32_t command_length = 12;
const uint32_t request_sequence_id = m_request_sequence_id;
MakeRequestPacketHeader (command, request_packet, command_length);
@@ -1042,8 +1070,8 @@
PacketStreamType request_packet (Stream::eBinary, m_addr_byte_size, m_byte_order);
bool use_64 = (GetVersion() >= 11);
uint32_t command_addr_byte_size = use_64 ? 8 : 4;
- const CommandType command = set ? (use_64 ? eCommandTypeBreakpointSet64 : eCommandTypeBreakpointSet ):
- (use_64 ? eCommandTypeBreakpointRemove64 : eCommandTypeBreakpointRemove);
+ const CommandType command = set ? (use_64 ? KDP_BREAKPOINT_SET64 : KDP_BREAKPOINT_SET ):
+ (use_64 ? KDP_BREAKPOINT_REMOVE64 : KDP_BREAKPOINT_REMOVE);
const uint32_t command_length = 8 + command_addr_byte_size;
const uint32_t request_sequence_id = m_request_sequence_id;
@@ -1060,7 +1088,7 @@
CommunicationKDP::SendRequestSuspend ()
{
PacketStreamType request_packet (Stream::eBinary, m_addr_byte_size, m_byte_order);
- const CommandType command = eCommandTypeSuspend;
+ const CommandType command = KDP_SUSPEND;
const uint32_t command_length = 8;
const uint32_t request_sequence_id = m_request_sequence_id;
MakeRequestPacketHeader (command, request_packet, command_length);
Modified: lldb/trunk/source/Plugins/Process/MacOSX-Kernel/CommunicationKDP.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/MacOSX-Kernel/CommunicationKDP.h?rev=135652&r1=135651&r2=135652&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/MacOSX-Kernel/CommunicationKDP.h (original)
+++ lldb/trunk/source/Plugins/Process/MacOSX-Kernel/CommunicationKDP.h Wed Jul 20 20:12:01 2011
@@ -38,36 +38,36 @@
typedef lldb_private::StreamBuffer<1024> PacketStreamType;
typedef enum
{
- eCommandTypeConnect = 0u,
- eCommandTypeDisconnect,
- eCommandTypeHostInfo,
- eCommandTypeVersion,
- eCommandTypeMaxBytes,
- eCommandTypeReadMemory,
- eCommandTypeWriteMemory,
- eCommandTypeReadRegisters,
- eCommandTypeWriteRegisters,
- eCommandTypeLoad,
- eCommandTypeImagePath,
- eCommandTypeSuspend,
- eCommandTypeResume,
- eCommandTypeException,
- eCommandTypeTermination,
- eCommandTypeBreakpointSet,
- eCommandTypeBreakpointRemove,
- eCommandTypeRegions,
- eCommandTypeReattach,
- eCommandTypeHostReboot,
- eCommandTypeReadMemory64,
- eCommandTypeWriteMemory64,
- eCommandTypeBreakpointSet64,
- eCommandTypeBreakpointRemove64,
- eCommandTypeKernelVersion
+ KDP_CONNECT = 0u,
+ KDP_DISCONNECT,
+ KDP_HOSTINFO,
+ KDP_VERSION,
+ KDP_MAXBYTES,
+ KDP_READMEM,
+ KDP_WRITEMEM,
+ KDP_READREGS,
+ KDP_WRITEREGS,
+ KDP_LOAD,
+ KDP_IMAGEPATH,
+ KDP_SUSPEND,
+ KDP_RESUMECPUS,
+ KDP_EXCEPTION,
+ KDP_TERMINATION,
+ KDP_BREAKPOINT_SET,
+ KDP_BREAKPOINT_REMOVE,
+ KDP_REGIONS,
+ KDP_REATTACH,
+ KDP_HOSTREBOOT,
+ KDP_READMEM64,
+ KDP_WRITEMEM64,
+ KDP_BREAKPOINT_SET64,
+ KDP_BREAKPOINT_REMOVE64,
+ KDP_KERNELVERSION,
} CommandType;
enum
{
- eFeatureLocalBreakpointsSupported = (1u << 0),
+ KDP_FEATURE_BP = (1u << 0),
};
typedef enum
@@ -181,6 +181,10 @@
const char *
GetKernelVersion ();
+ // Disable KDP_IMAGEPATH for now, it seems to hang the KDP connection...
+ // const char *
+ // GetImagePath ();
+
uint32_t
GetVersion ();
@@ -190,7 +194,7 @@
bool
LocalBreakpointsAreSupported ()
{
- return (GetFeatureFlags() & eFeatureLocalBreakpointsSupported) != 0;
+ return (GetFeatureFlags() & KDP_FEATURE_BP) != 0;
}
uint32_t
@@ -213,7 +217,6 @@
SendRequestBreakpoint (bool set, lldb::addr_t addr);
protected:
- typedef std::list<std::string> packet_collection;
bool
SendRequestPacketNoLock (const PacketStreamType &request_packet);
@@ -243,6 +246,10 @@
bool
SendRequestKernelVersion ();
+ // Disable KDP_IMAGEPATH for now, it seems to hang the KDP connection...
+ //bool
+ //SendRequestImagePath ();
+
void
DumpPacket (lldb_private::Stream &s,
const void *data,
@@ -307,6 +314,7 @@
uint32_t m_kdp_hostinfo_cpu_type;
uint32_t m_kdp_hostinfo_cpu_subtype;
std::string m_kernel_version;
+ //std::string m_image_path; // Disable KDP_IMAGEPATH for now, it seems to hang the KDP connection...
lldb::addr_t m_last_read_memory_addr; // Last memory read address for logging
private:
//------------------------------------------------------------------
Modified: lldb/trunk/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp?rev=135652&r1=135651&r2=135652&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp (original)
+++ lldb/trunk/source/Plugins/Process/MacOSX-Kernel/ProcessKDP.cpp Wed Jul 20 20:12:01 2011
@@ -190,12 +190,17 @@
StreamSP async_strm_sp(m_target.GetDebugger().GetAsyncOutputStream());
if (async_strm_sp)
{
- const char *kernel_version = m_comm.GetKernelVersion ();
- if (kernel_version)
+ const char *cstr;
+ if ((cstr = m_comm.GetKernelVersion ()) != NULL)
{
- async_strm_sp->Printf ("KDP connected to %s\n", kernel_version);
+ async_strm_sp->Printf ("Version: %s\n", cstr);
async_strm_sp->Flush();
}
+// if ((cstr = m_comm.GetImagePath ()) != NULL)
+// {
+// async_strm_sp->Printf ("Image Path: %s\n", cstr);
+// async_strm_sp->Flush();
+// }
}
}
}
@@ -491,8 +496,6 @@
// Interrupt if our inferior is running...
if (m_comm.IsConnected())
{
- m_comm.SendRequestDisconnect();
-
if (m_public_state.GetValue() == eStateAttaching)
{
// We are being asked to halt during an attach. We need to just close
@@ -501,6 +504,9 @@
}
else
{
+ DisableAllBreakpointSites ();
+
+ m_comm.SendRequestDisconnect();
StringExtractor response;
// TODO: Send kill packet?
@@ -563,8 +569,18 @@
if (m_comm.LocalBreakpointsAreSupported ())
{
Error error;
- if (!m_comm.SendRequestBreakpoint(true, bp_site->GetLoadAddress()))
- error.SetErrorString ("KDP set breakpoint failed");
+ if (!bp_site->IsEnabled())
+ {
+ if (m_comm.SendRequestBreakpoint(true, bp_site->GetLoadAddress()))
+ {
+ bp_site->SetEnabled(true);
+ bp_site->SetType (BreakpointSite::eExternal);
+ }
+ else
+ {
+ error.SetErrorString ("KDP set breakpoint failed");
+ }
+ }
return error;
}
return EnableSoftwareBreakpoint (bp_site);
@@ -576,8 +592,21 @@
if (m_comm.LocalBreakpointsAreSupported ())
{
Error error;
- if (!m_comm.SendRequestBreakpoint(false, bp_site->GetLoadAddress()))
- error.SetErrorString ("KDP remove breakpoint failed");
+ if (bp_site->IsEnabled())
+ {
+ BreakpointSite::Type bp_type = bp_site->GetType();
+ if (bp_type == BreakpointSite::eExternal)
+ {
+ if (m_comm.SendRequestBreakpoint(false, bp_site->GetLoadAddress()))
+ bp_site->SetEnabled(false);
+ else
+ error.SetErrorString ("KDP remove breakpoint failed");
+ }
+ else
+ {
+ error = DisableSoftwareBreakpoint (bp_site);
+ }
+ }
return error;
}
return DisableSoftwareBreakpoint (bp_site);
More information about the lldb-commits
mailing list