diff options
| author | Greg Clayton <gclayton@apple.com> | 2011-06-02 22:22:38 +0000 |
|---|---|---|
| committer | Greg Clayton <gclayton@apple.com> | 2011-06-02 22:22:38 +0000 |
| commit | dd0e5a525800c22703ef70a6a1688269dd6e8ccd (patch) | |
| tree | 612e0ee9461e33e886cb9bb144ac3e84b8b3657b /lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp | |
| parent | 8672996e4d7bf1af365e89cb09e368222a48829b (diff) | |
| download | llvm-dd0e5a525800c22703ef70a6a1688269dd6e8ccd.zip llvm-dd0e5a525800c22703ef70a6a1688269dd6e8ccd.tar.gz llvm-dd0e5a525800c22703ef70a6a1688269dd6e8ccd.tar.bz2 | |
Make sure we don't lose our stop reply packet in the case where the other
GDB server doesn't support the LLDB specific qThreadStopInfo packet.
llvm-svn: 132499
Diffstat (limited to 'lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp')
| -rw-r--r-- | lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp | 27 |
1 files changed, 6 insertions, 21 deletions
diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp index e8335c6..8b0c47c 100644 --- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp @@ -391,10 +391,9 @@ ProcessGDBRemote::DoConnectRemote (const char *remote_url) // We have a valid process SetID (pid); UpdateThreadListIfNeeded (); - StringExtractorGDBRemote response; - if (m_gdb_comm.SendPacketAndWaitForResponse("?", 1, response, false)) + if (m_gdb_comm.SendPacketAndWaitForResponse("?", 1, m_last_stop_packet, false)) { - const StateType state = SetThreadStopInfo (response); + const StateType state = SetThreadStopInfo (m_last_stop_packet); if (state == eStateStopped) { SetPrivateState (state); @@ -550,10 +549,9 @@ ProcessGDBRemote::DoLaunch return error; } - StringExtractorGDBRemote response; - if (m_gdb_comm.SendPacketAndWaitForResponse("?", 1, response, false)) + if (m_gdb_comm.SendPacketAndWaitForResponse("?", 1, m_last_stop_packet, false)) { - SetPrivateState (SetThreadStopInfo (response)); + SetPrivateState (SetThreadStopInfo (m_last_stop_packet)); if (!disable_stdio) { @@ -1097,6 +1095,7 @@ ProcessGDBRemote::UpdateThreadListIfNeeded () StateType ProcessGDBRemote::SetThreadStopInfo (StringExtractor& stop_packet) { + stop_packet.SetFilePos (0); const char stop_type = stop_packet.GetChar(); switch (stop_type) { @@ -1245,22 +1244,10 @@ ProcessGDBRemote::SetThreadStopInfo (StringExtractor& stop_packet) void ProcessGDBRemote::RefreshStateAfterStop () { - // FIXME - add a variable to tell that we're in the middle of attaching if we - // need to know that. - // We must be attaching if we don't already have a valid architecture -// if (!GetTarget().GetArchitecture().IsValid()) -// { -// Module *exe_module = GetTarget().GetExecutableModule().get(); -// if (exe_module) -// m_arch_spec = exe_module->GetArchitecture(); -// } - // Let all threads recover from stopping and do any clean up based // on the previous thread state (if any). m_thread_list.RefreshStateAfterStop(); - - // Discover new threads: - UpdateThreadListIfNeeded (); + SetThreadStopInfo (m_last_stop_packet); } Error @@ -2342,13 +2329,11 @@ ProcessGDBRemote::AsyncThread (void *arg) case eStateCrashed: case eStateSuspended: process->m_last_stop_packet = response; - process->m_last_stop_packet.SetFilePos (0); process->SetPrivateState (stop_state); break; case eStateExited: process->m_last_stop_packet = response; - process->m_last_stop_packet.SetFilePos (0); response.SetFilePos(1); process->SetExitStatus(response.GetHexU8(), NULL); done = true; |
