blob: 175433a3e20c1f7ffe77a8c5d65ffef29a3fdfe0 [file] [log] [blame]
Chris Lattner30fdc8d2010-06-08 16:52:24 +00001//===-- ThreadGDBRemote.h ---------------------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef liblldb_ThreadGDBRemote_h_
11#define liblldb_ThreadGDBRemote_h_
12
13#include <string>
14
Jason Molenda705b1802014-06-13 02:37:02 +000015#include "lldb/Core/StructuredData.h"
Chris Lattner30fdc8d2010-06-08 16:52:24 +000016#include "lldb/Target/Process.h"
17#include "lldb/Target/Thread.h"
Chris Lattner30fdc8d2010-06-08 16:52:24 +000018
19class StringExtractor;
Tamas Berghammerdb264a62015-03-31 09:52:22 +000020
21namespace lldb_private {
22namespace process_gdb_remote {
23
Chris Lattner30fdc8d2010-06-08 16:52:24 +000024class ProcessGDBRemote;
25
Tamas Berghammerdb264a62015-03-31 09:52:22 +000026class ThreadGDBRemote : public Thread
Chris Lattner30fdc8d2010-06-08 16:52:24 +000027{
28public:
Tamas Berghammerdb264a62015-03-31 09:52:22 +000029 ThreadGDBRemote (Process &process, lldb::tid_t tid);
Chris Lattner30fdc8d2010-06-08 16:52:24 +000030
31 virtual
32 ~ThreadGDBRemote ();
33
Tamas Berghammer30b8cd32015-03-23 15:50:03 +000034 void
35 WillResume (lldb::StateType resume_state) override;
Chris Lattner30fdc8d2010-06-08 16:52:24 +000036
Tamas Berghammer30b8cd32015-03-23 15:50:03 +000037 void
38 RefreshStateAfterStop() override;
Chris Lattner30fdc8d2010-06-08 16:52:24 +000039
Tamas Berghammer30b8cd32015-03-23 15:50:03 +000040 const char *
41 GetName () override;
Chris Lattner30fdc8d2010-06-08 16:52:24 +000042
Tamas Berghammer30b8cd32015-03-23 15:50:03 +000043 const char *
44 GetQueueName () override;
Chris Lattner30fdc8d2010-06-08 16:52:24 +000045
Tamas Berghammer30b8cd32015-03-23 15:50:03 +000046 lldb::queue_id_t
47 GetQueueID () override;
Jason Molenda3dc4f442013-10-18 05:55:24 +000048
Tamas Berghammer30b8cd32015-03-23 15:50:03 +000049 lldb::QueueSP
50 GetQueue () override;
Jason Molenda2dd5deb2014-04-25 00:02:11 +000051
Jason Molendaaac16e02014-03-13 02:54:54 +000052 lldb::addr_t
Tamas Berghammer30b8cd32015-03-23 15:50:03 +000053 GetQueueLibdispatchQueueAddress () override;
Jason Molendaaac16e02014-03-13 02:54:54 +000054
Tamas Berghammer30b8cd32015-03-23 15:50:03 +000055 lldb::RegisterContextSP
56 GetRegisterContext () override;
Chris Lattner30fdc8d2010-06-08 16:52:24 +000057
Tamas Berghammer30b8cd32015-03-23 15:50:03 +000058 lldb::RegisterContextSP
Tamas Berghammerdb264a62015-03-31 09:52:22 +000059 CreateRegisterContextForFrame (StackFrame *frame) override;
Chris Lattner30fdc8d2010-06-08 16:52:24 +000060
Chris Lattner30fdc8d2010-06-08 16:52:24 +000061 void
Tamas Berghammerdb264a62015-03-31 09:52:22 +000062 Dump (Log *log, uint32_t index);
Chris Lattner30fdc8d2010-06-08 16:52:24 +000063
64 static bool
65 ThreadIDIsValid (lldb::tid_t thread);
66
67 bool
68 ShouldStop (bool &step_more);
69
70 const char *
71 GetBasicInfoAsString ();
72
Chris Lattner30fdc8d2010-06-08 16:52:24 +000073 void
Tamas Berghammer30b8cd32015-03-23 15:50:03 +000074 SetName (const char *name) override
Chris Lattner30fdc8d2010-06-08 16:52:24 +000075 {
76 if (name && name[0])
77 m_thread_name.assign (name);
78 else
79 m_thread_name.clear();
80 }
81
82 lldb::addr_t
83 GetThreadDispatchQAddr ()
84 {
85 return m_thread_dispatch_qaddr;
86 }
87
88 void
89 SetThreadDispatchQAddr (lldb::addr_t thread_dispatch_qaddr)
90 {
91 m_thread_dispatch_qaddr = thread_dispatch_qaddr;
92 }
93
Greg Clayton0b90be12015-06-23 21:27:50 +000094 void
95 ClearQueueInfo ();
96
97 void
98 SetQueueInfo (std::string &&queue_name, lldb::QueueKind queue_kind, uint64_t queue_serial);
99
Tamas Berghammerdb264a62015-03-31 09:52:22 +0000100 StructuredData::ObjectSP
Tamas Berghammer30b8cd32015-03-23 15:50:03 +0000101 FetchThreadExtendedInfo () override;
Jason Molenda705b1802014-06-13 02:37:02 +0000102
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000103protected:
Greg Clayton3e06bd92011-01-09 21:07:35 +0000104
105 friend class ProcessGDBRemote;
106
Greg Claytone576ab22011-02-15 00:19:15 +0000107 bool
Greg Clayton3e06bd92011-01-09 21:07:35 +0000108 PrivateSetRegisterValue (uint32_t reg,
109 StringExtractor &response);
Greg Clayton0b90be12015-06-23 21:27:50 +0000110
111 bool
112 CachedQueueInfoIsValid() const
113 {
114 return m_queue_kind != lldb::eQueueKindUnknown;
115 }
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000116 //------------------------------------------------------------------
117 // Member variables.
118 //------------------------------------------------------------------
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000119 std::string m_thread_name;
120 std::string m_dispatch_queue_name;
121 lldb::addr_t m_thread_dispatch_qaddr;
Greg Clayton0b90be12015-06-23 21:27:50 +0000122 lldb::QueueKind m_queue_kind; // Queue info from stop reply/stop info for thread
123 uint64_t m_queue_serial; // Queue info from stop reply/stop info for thread
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000124 //------------------------------------------------------------------
125 // Member variables.
126 //------------------------------------------------------------------
127
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000128 void
129 SetStopInfoFromPacket (StringExtractor &stop_packet, uint32_t stop_id);
130
Tamas Berghammer30b8cd32015-03-23 15:50:03 +0000131 bool
132 CalculateStopInfo () override;
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000133};
134
Tamas Berghammerdb264a62015-03-31 09:52:22 +0000135} // namespace process_gdb_remote
136} // namespace lldb_private
137
Chris Lattner30fdc8d2010-06-08 16:52:24 +0000138#endif // liblldb_ThreadGDBRemote_h_