1 //===-- ThreadKDP.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_ThreadKDP_h_
11 #define liblldb_ThreadKDP_h_
12 
13 #include <string>
14 
15 #include "lldb/Target/Process.h"
16 #include "lldb/Target/Thread.h"
17 
18 class ProcessKDP;
19 
20 class ThreadKDP : public lldb_private::Thread {
21 public:
22   ThreadKDP(lldb_private::Process &process, lldb::tid_t tid);
23 
24   virtual ~ThreadKDP();
25 
26   virtual void RefreshStateAfterStop();
27 
28   virtual const char *GetName();
29 
30   virtual const char *GetQueueName();
31 
32   virtual lldb::RegisterContextSP GetRegisterContext();
33 
34   virtual lldb::RegisterContextSP
35   CreateRegisterContextForFrame(lldb_private::StackFrame *frame);
36 
37   void Dump(lldb_private::Log *log, uint32_t index);
38 
39   static bool ThreadIDIsValid(lldb::tid_t thread);
40 
41   bool ShouldStop(bool &step_more);
42 
43   const char *GetBasicInfoAsString();
44 
45   void SetName(const char *name) {
46     if (name && name[0])
47       m_thread_name.assign(name);
48     else
49       m_thread_name.clear();
50   }
51 
52   lldb::addr_t GetThreadDispatchQAddr() { return m_thread_dispatch_qaddr; }
53 
54   void SetThreadDispatchQAddr(lldb::addr_t thread_dispatch_qaddr) {
55     m_thread_dispatch_qaddr = thread_dispatch_qaddr;
56   }
57 
58   void SetStopInfoFrom_KDP_EXCEPTION(
59       const lldb_private::DataExtractor &exc_reply_packet);
60 
61 protected:
62   friend class ProcessKDP;
63 
64   //------------------------------------------------------------------
65   // Member variables.
66   //------------------------------------------------------------------
67   std::string m_thread_name;
68   std::string m_dispatch_queue_name;
69   lldb::addr_t m_thread_dispatch_qaddr;
70   lldb::StopInfoSP m_cached_stop_info_sp;
71   //------------------------------------------------------------------
72   // Protected member functions.
73   //------------------------------------------------------------------
74   virtual bool CalculateStopInfo();
75 };
76 
77 #endif // liblldb_ThreadKDP_h_
78