xref: /llvm-project/lldb/source/Plugins/Process/gdb-remote/ThreadGDBRemote.h (revision db264a6d09b04f6794e786078bf727c1c10c798a)
1 //===-- 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 
15 #include "lldb/Core/StructuredData.h"
16 #include "lldb/Target/Process.h"
17 #include "lldb/Target/Thread.h"
18 
19 class StringExtractor;
20 
21 namespace lldb_private {
22 namespace process_gdb_remote {
23 
24 class ProcessGDBRemote;
25 
26 class ThreadGDBRemote : public Thread
27 {
28 public:
29     ThreadGDBRemote (Process &process, lldb::tid_t tid);
30 
31     virtual
32     ~ThreadGDBRemote ();
33 
34     void
35     WillResume (lldb::StateType resume_state) override;
36 
37     void
38     RefreshStateAfterStop() override;
39 
40     const char *
41     GetName () override;
42 
43     const char *
44     GetQueueName () override;
45 
46     lldb::queue_id_t
47     GetQueueID () override;
48 
49     lldb::QueueSP
50     GetQueue () override;
51 
52     lldb::addr_t
53     GetQueueLibdispatchQueueAddress () override;
54 
55     lldb::RegisterContextSP
56     GetRegisterContext () override;
57 
58     lldb::RegisterContextSP
59     CreateRegisterContextForFrame (StackFrame *frame) override;
60 
61     void
62     Dump (Log *log, uint32_t index);
63 
64     static bool
65     ThreadIDIsValid (lldb::tid_t thread);
66 
67     bool
68     ShouldStop (bool &step_more);
69 
70     const char *
71     GetBasicInfoAsString ();
72 
73     void
74     SetName (const char *name) override
75     {
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 
94     StructuredData::ObjectSP
95     FetchThreadExtendedInfo () override;
96 
97 protected:
98 
99     friend class ProcessGDBRemote;
100 
101     bool
102     PrivateSetRegisterValue (uint32_t reg,
103                              StringExtractor &response);
104 
105     //------------------------------------------------------------------
106     // Member variables.
107     //------------------------------------------------------------------
108     std::string m_thread_name;
109     std::string m_dispatch_queue_name;
110     lldb::addr_t m_thread_dispatch_qaddr;
111     //------------------------------------------------------------------
112     // Member variables.
113     //------------------------------------------------------------------
114 
115     void
116     SetStopInfoFromPacket (StringExtractor &stop_packet, uint32_t stop_id);
117 
118     bool
119     CalculateStopInfo () override;
120 };
121 
122 } // namespace process_gdb_remote
123 } // namespace lldb_private
124 
125 #endif  // liblldb_ThreadGDBRemote_h_
126