summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Molenda <jmolenda@apple.com>2011-07-26 03:34:52 +0000
committerJason Molenda <jmolenda@apple.com>2011-07-26 03:34:52 +0000
commit26a27fb832392d3c6ea965ed44ed2158ecd5baf9 (patch)
treec81a01e638646ce6f4379c35dc171d1791b2ea9e
parent115b077f302c7ff6854f306af12c157f631842b7 (diff)
downloadbcm5719-llvm-26a27fb832392d3c6ea965ed44ed2158ecd5baf9.tar.gz
bcm5719-llvm-26a27fb832392d3c6ea965ed44ed2158ecd5baf9.zip
RNBRemote.cpp, RNBRemote.h: Add a new qGetPid packet which returns
the pid of the process currently being debugged by debugserer in hex, or 0 if unavailable. This is effectively the same as the qC packet but that packet is not clear in either its documentation or implementation (in gdb et al) as to whether it is intended to return a pid or a thread id. qGetPid is unambiguous. If qGetPid is unimplemented in the remote debugserver, the debugger may try qC and see what kind of value is returned.. llvm-svn: 136055
-rw-r--r--lldb/tools/debugserver/source/RNBRemote.cpp16
-rw-r--r--lldb/tools/debugserver/source/RNBRemote.h2
2 files changed, 18 insertions, 0 deletions
diff --git a/lldb/tools/debugserver/source/RNBRemote.cpp b/lldb/tools/debugserver/source/RNBRemote.cpp
index 654f6c57def..ec77e48042c 100644
--- a/lldb/tools/debugserver/source/RNBRemote.cpp
+++ b/lldb/tools/debugserver/source/RNBRemote.cpp
@@ -154,6 +154,7 @@ RNBRemote::CreatePacketTable ()
// t.push_back (Packet (insert_access_watch_bp, &RNBRemote::HandlePacket_UNIMPLEMENTED, NULL, "Z4", "Insert access watchpoint"));
// t.push_back (Packet (remove_access_watch_bp, &RNBRemote::HandlePacket_UNIMPLEMENTED, NULL, "z4", "Remove access watchpoint"));
t.push_back (Packet (query_current_thread_id, &RNBRemote::HandlePacket_qC, NULL, "qC", "Query current thread ID"));
+ t.push_back (Packet (query_get_pid, &RNBRemote::HandlePacket_qGetPid, NULL, "qGetPid", "Query process id"));
// t.push_back (Packet (query_memory_crc, &RNBRemote::HandlePacket_UNIMPLEMENTED, NULL, "qCRC:", "Compute CRC of memory region"));
t.push_back (Packet (query_thread_ids_first, &RNBRemote::HandlePacket_qThreadInfo, NULL, "qfThreadInfo", "Get list of active threads (first req)"));
t.push_back (Packet (query_thread_ids_subsequent, &RNBRemote::HandlePacket_qThreadInfo, NULL, "qsThreadInfo", "Get list of active threads (subsequent req)"));
@@ -1394,6 +1395,21 @@ RNBRemote::HandlePacket_qC (const char *p)
}
rnb_err_t
+RNBRemote::HandlePacket_qGetPid (const char *p)
+{
+ nub_process_t pid;
+ std::ostringstream rep;
+ // If we haven't run the process yet, we tell the debugger the
+ // pid is 0. That way it can know to tell use to run later on.
+ if (m_ctx.HasValidProcessID())
+ pid = m_ctx.ProcessID();
+ else
+ pid = 0;
+ rep << std::hex << pid;
+ return SendPacket (rep.str());
+}
+
+rnb_err_t
RNBRemote::HandlePacket_qRegisterInfo (const char *p)
{
if (g_num_reg_entries == 0)
diff --git a/lldb/tools/debugserver/source/RNBRemote.h b/lldb/tools/debugserver/source/RNBRemote.h
index 03cdc6320e8..6940efc15b3 100644
--- a/lldb/tools/debugserver/source/RNBRemote.h
+++ b/lldb/tools/debugserver/source/RNBRemote.h
@@ -79,6 +79,7 @@ public:
remove_access_watch_bp, // 'z4'
query_current_thread_id, // 'qC'
+ query_get_pid, // 'qGetPid'
query_memory_crc, // 'qCRC:'
query_thread_ids_first, // 'qfThreadInfo'
query_thread_ids_subsequent, // 'qsThreadInfo'
@@ -155,6 +156,7 @@ public:
rnb_err_t HandlePacket_A (const char *p);
rnb_err_t HandlePacket_H (const char *p);
rnb_err_t HandlePacket_qC (const char *p);
+ rnb_err_t HandlePacket_qGetPid (const char *p);
rnb_err_t HandlePacket_qLaunchSuccess (const char *p);
rnb_err_t HandlePacket_qRegisterInfo (const char *p);
rnb_err_t HandlePacket_qShlibInfoAddr (const char *p);
OpenPOWER on IntegriCloud