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 (ProcessGDBRemote &process, lldb::tid_t tid);
25 
26     virtual
27     ~ThreadGDBRemote ();
28 
29     virtual bool
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::RegisterContextSP
42     GetRegisterContext ();
43 
44     virtual lldb::RegisterContextSP
45     CreateRegisterContextForFrame (lldb_private::StackFrame *frame);
46 
47     virtual void
48     ClearStackFrames ();
49 
50     ProcessGDBRemote &
51     GetGDBProcess ()
52     {
53         return (ProcessGDBRemote &)m_process;
54     }
55 
56     const ProcessGDBRemote &
57     GetGDBProcess () const
58     {
59         return (ProcessGDBRemote &)m_process;
60     }
61 
62     void
63     Dump (lldb_private::Log *log, uint32_t index);
64 
65     static bool
66     ThreadIDIsValid (lldb::tid_t thread);
67 
68     bool
69     ShouldStop (bool &step_more);
70 
71     const char *
72     GetBasicInfoAsString ();
73 
74     void
75     SetName (const char *name)
76     {
77         if (name && name[0])
78             m_thread_name.assign (name);
79         else
80             m_thread_name.clear();
81     }
82 
83     lldb::addr_t
84     GetThreadDispatchQAddr ()
85     {
86         return m_thread_dispatch_qaddr;
87     }
88 
89     void
90     SetThreadDispatchQAddr (lldb::addr_t thread_dispatch_qaddr)
91     {
92         m_thread_dispatch_qaddr = thread_dispatch_qaddr;
93     }
94 
95 protected:
96 
97     friend class ProcessGDBRemote;
98 
99     bool
100     PrivateSetRegisterValue (uint32_t reg,
101                              StringExtractor &response);
102 
103     //------------------------------------------------------------------
104     // Member variables.
105     //------------------------------------------------------------------
106     std::string m_thread_name;
107     std::string m_dispatch_queue_name;
108     lldb::addr_t m_thread_dispatch_qaddr;
109     //------------------------------------------------------------------
110     // Member variables.
111     //------------------------------------------------------------------
112 
113     void
114     SetStopInfoFromPacket (StringExtractor &stop_packet, uint32_t stop_id);
115 
116     virtual lldb::StopInfoSP
117     GetPrivateStopReason ();
118 
119 
120 };
121 
122 #endif  // liblldb_ThreadGDBRemote_h_
123