diff options
| author | Greg Clayton <gclayton@apple.com> | 2011-01-18 19:36:39 +0000 |
|---|---|---|
| committer | Greg Clayton <gclayton@apple.com> | 2011-01-18 19:36:39 +0000 |
| commit | c4e411ffc09a77abe9957f83827fc1745d7e0408 (patch) | |
| tree | 78a1107cecd93fdb0cda97b735d5ff23751f2c4a /lldb/tools/debugserver/source/RNBRemote.h | |
| parent | 4dc73fa075db86bc6a07d755d972e9f8ad7336cc (diff) | |
| download | bcm5719-llvm-c4e411ffc09a77abe9957f83827fc1745d7e0408.tar.gz bcm5719-llvm-c4e411ffc09a77abe9957f83827fc1745d7e0408.zip | |
Thread safety changes in debugserver and also in the process GDB remote plugin.
I added support for asking if the GDB remote server supports thread suffixes
for packets that should be thread specific (register read/write packets) because
the way the GDB remote protocol does it right now is to have a notion of a
current thread for register and memory reads/writes (set via the "$Hg%x" packet)
and a current thread for running ("$Hc%x"). Now we ask the remote GDB server
if it supports adding the thread ID to the register packets and we enable
that feature in LLDB if supported. This stops us from having to send a bunch
of packets that update the current thread ID to some value which is prone to
error, or extra packets.
llvm-svn: 123762
Diffstat (limited to 'lldb/tools/debugserver/source/RNBRemote.h')
| -rw-r--r-- | lldb/tools/debugserver/source/RNBRemote.h | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/lldb/tools/debugserver/source/RNBRemote.h b/lldb/tools/debugserver/source/RNBRemote.h index fab42bc9693..82febf7d226 100644 --- a/lldb/tools/debugserver/source/RNBRemote.h +++ b/lldb/tools/debugserver/source/RNBRemote.h @@ -93,6 +93,7 @@ public: query_host_info, // 'qHostInfo' pass_signals_to_inferior, // 'QPassSignals' start_noack_mode, // 'QStartNoAckMode' + prefix_reg_packets_with_tid, // 'QPrefixRegisterPacketsWithThreadID set_logging_mode, // 'QSetLogging:' set_max_packet_size, // 'QSetMaxPacketSize:' set_max_payload_size, // 'QSetMaxPayloadSize:' @@ -156,7 +157,14 @@ public: rnb_err_t HandlePacket_qThreadExtraInfo (const char *p); rnb_err_t HandlePacket_qThreadStopInfo (const char *p); rnb_err_t HandlePacket_qHostInfo (const char *p); - rnb_err_t HandlePacket_Q (const char *p); + rnb_err_t HandlePacket_QStartNoAckMode (const char *p); + rnb_err_t HandlePacket_QThreadSuffixSupported (const char *p); + rnb_err_t HandlePacket_QSetLogging (const char *p); + rnb_err_t HandlePacket_QSetDisableASLR (const char *p); + rnb_err_t HandlePacket_QSetMaxPayloadSize (const char *p); + rnb_err_t HandlePacket_QSetMaxPacketSize (const char *p); + rnb_err_t HandlePacket_QEnvironment (const char *p); + rnb_err_t HandlePacket_QPrefixRegisterPacketsWithThreadID (const char *p); rnb_err_t HandlePacket_last_signal (const char *p); rnb_err_t HandlePacket_m (const char *p); rnb_err_t HandlePacket_M (const char *p); @@ -237,6 +245,9 @@ protected: void CreatePacketTable (); rnb_err_t GetPacketPayload (std::string &); + nub_thread_t + ExtractThreadIDFromThreadSuffix (const char *p); + // gdb can send multiple Z/z packets for the same address and // these calls must be ref counted. struct Breakpoint @@ -286,7 +297,13 @@ protected: uint32_t m_max_payload_size; // the maximum sized payload we should send to gdb bool m_extended_mode:1, // are we in extended mode? m_noack_mode:1, // are we in no-ack mode? - m_use_native_regs:1; // Use native registers by querying DNB layer for register definitions? + m_noack_mode_just_enabled:1, // Did we just enable this and need to compute one more checksum? + m_use_native_regs:1, // Use native registers by querying DNB layer for register definitions? + m_thread_suffix_supported:1; // Set to true if the 'p', 'P', 'g', and 'G' packets should be prefixed with the thread ID and colon: + // "$pRR;thread:TTTT;" instead of "$pRR" + // "$PRR=VVVVVVVV;thread:TTTT;" instead of "$PRR=VVVVVVVV" + // "$g;thread:TTTT" instead of "$g" + // "$GVVVVVVVVVVVVVV;thread:TTTT;#00 instead of "$GVVVVVVVVVVVVVV" }; /* We translate the /usr/include/mach/exception_types.h exception types |

