diff options
author | Jason Molenda <jmolenda@apple.com> | 2011-07-26 03:34:52 +0000 |
---|---|---|
committer | Jason Molenda <jmolenda@apple.com> | 2011-07-26 03:34:52 +0000 |
commit | 26a27fb832392d3c6ea965ed44ed2158ecd5baf9 (patch) | |
tree | c81a01e638646ce6f4379c35dc171d1791b2ea9e | |
parent | 115b077f302c7ff6854f306af12c157f631842b7 (diff) | |
download | bcm5719-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.cpp | 16 | ||||
-rw-r--r-- | lldb/tools/debugserver/source/RNBRemote.h | 2 |
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); |