summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSean Callanan <scallanan@apple.com>2013-09-04 23:24:15 +0000
committerSean Callanan <scallanan@apple.com>2013-09-04 23:24:15 +0000
commitb1de1141f127f211158409acabd75140c5bbec5a (patch)
tree236464fb4789b8546cf9e1d615d2e79aba025cf3
parent282b4492dbd9123ad4360853c1b3b4e0d26a302a (diff)
downloadbcm5719-llvm-b1de1141f127f211158409acabd75140c5bbec5a.tar.gz
bcm5719-llvm-b1de1141f127f211158409acabd75140c5bbec5a.zip
Fixed detection of 'p' packet support in debugserver,
by appending the thread ID to the test packet when debugserver requires it. This allows register writing (and, by extension, expressions) to work on Mac OS X. llvm-svn: 190007
-rw-r--r--lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp12
-rw-r--r--lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h2
-rw-r--r--lldb/source/Plugins/Process/gdb-remote/ThreadGDBRemote.cpp2
3 files changed, 12 insertions, 4 deletions
diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
index 67cdbfd588a..6a53a11152d 100644
--- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
+++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp
@@ -300,14 +300,22 @@ GDBRemoteCommunicationClient::GetVContSupported (char flavor)
// Check if the target supports 'p' packet. It sends out a 'p'
// packet and checks the response. A normal packet will tell us
// that support is available.
+//
+// Takes a valid thread ID because p needs to apply to a thread.
bool
-GDBRemoteCommunicationClient::GetpPacketSupported ()
+GDBRemoteCommunicationClient::GetpPacketSupported (lldb::tid_t tid)
{
if (m_supports_p == eLazyBoolCalculate)
{
StringExtractorGDBRemote response;
m_supports_p = eLazyBoolNo;
- if (SendPacketAndWaitForResponse("p0", response, false))
+ char packet[256];
+ if (GetThreadSuffixSupported())
+ snprintf(packet, sizeof(packet), "p0;thread:%" PRIx64 ";", tid);
+ else
+ snprintf(packet, sizeof(packet), "p0");
+
+ if (SendPacketAndWaitForResponse(packet, response, false))
{
if (response.IsNormalResponse())
m_supports_p = eLazyBoolYes;
diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h
index fc317be2a20..535a69c248e 100644
--- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h
+++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.h
@@ -228,7 +228,7 @@ public:
GetVContSupported (char flavor);
bool
- GetpPacketSupported ();
+ GetpPacketSupported (lldb::tid_t tid);
bool
GetVAttachOrWaitSupported ();
diff --git a/lldb/source/Plugins/Process/gdb-remote/ThreadGDBRemote.cpp b/lldb/source/Plugins/Process/gdb-remote/ThreadGDBRemote.cpp
index b405f03463c..cce5a599566 100644
--- a/lldb/source/Plugins/Process/gdb-remote/ThreadGDBRemote.cpp
+++ b/lldb/source/Plugins/Process/gdb-remote/ThreadGDBRemote.cpp
@@ -177,7 +177,7 @@ ThreadGDBRemote::CreateRegisterContextForFrame (StackFrame *frame)
{
ProcessGDBRemote *gdb_process = static_cast<ProcessGDBRemote *>(process_sp.get());
// read_all_registers_at_once will be true if 'p' packet is not supported.
- bool read_all_registers_at_once = !gdb_process->GetGDBRemote().GetpPacketSupported ();
+ bool read_all_registers_at_once = !gdb_process->GetGDBRemote().GetpPacketSupported (GetID());
reg_ctx_sp.reset (new GDBRemoteRegisterContext (*this, concrete_frame_idx, gdb_process->m_register_info, read_all_registers_at_once));
}
}
OpenPOWER on IntegriCloud