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/Target/Process.h"
16 #include "lldb/Target/Thread.h"
17 
18 class StringExtractor;
19 class ProcessGDBRemote;
20 
21 class ThreadGDBRemote : public lldb_private::Thread
22 {
23 public:
24     ThreadGDBRemote (lldb_private::Process &process, lldb::tid_t tid);
25 
26     virtual
27     ~ThreadGDBRemote ();
28 
29     virtual void
30     WillResume (lldb::StateType resume_state);
31 
32     virtual void
33     RefreshStateAfterStop();
34 
35     virtual const char *
36     GetName ();
37 
38     virtual const char *
39     GetQueueName ();
40 
41     virtual lldb::queue_id_t
42     GetQueueID ();
43 
44     lldb::addr_t
45     GetQueueLibdispatchQueueAddress ();
46 
47     virtual lldb::RegisterContextSP
48     GetRegisterContext ();
49 
50     virtual lldb::RegisterContextSP
51     CreateRegisterContextForFrame (lldb_private::StackFrame *frame);
52 
53     void
54     Dump (lldb_private::Log *log, uint32_t index);
55 
56     static bool
57     ThreadIDIsValid (lldb::tid_t thread);
58 
59     bool
60     ShouldStop (bool &step_more);
61 
62     const char *
63     GetBasicInfoAsString ();
64 
65     void
66     SetName (const char *name)
67     {
68         if (name && name[0])
69             m_thread_name.assign (name);
70         else
71             m_thread_name.clear();
72     }
73 
74     lldb::addr_t
75     GetThreadDispatchQAddr ()
76     {
77         return m_thread_dispatch_qaddr;
78     }
79 
80     void
81     SetThreadDispatchQAddr (lldb::addr_t thread_dispatch_qaddr)
82     {
83         m_thread_dispatch_qaddr = thread_dispatch_qaddr;
84     }
85 
86 protected:
87 
88     friend class ProcessGDBRemote;
89 
90     bool
91     PrivateSetRegisterValue (uint32_t reg,
92                              StringExtractor &response);
93 
94     //------------------------------------------------------------------
95     // Member variables.
96     //------------------------------------------------------------------
97     std::string m_thread_name;
98     std::string m_dispatch_queue_name;
99     lldb::addr_t m_thread_dispatch_qaddr;
100     //------------------------------------------------------------------
101     // Member variables.
102     //------------------------------------------------------------------
103 
104     void
105     SetStopInfoFromPacket (StringExtractor &stop_packet, uint32_t stop_id);
106 
107     virtual bool
108     CalculateStopInfo ();
109 
110 
111 };
112 
113 #endif  // liblldb_ThreadGDBRemote_h_
114