xref: /openbsd-src/gnu/llvm/lldb/source/Plugins/Process/MacOSX-Kernel/ThreadKDP.h (revision 061da546b983eb767bad15e67af1174fb0bcf31c)
1*061da546Spatrick //===-- ThreadKDP.h ---------------------------------------*- C++ -*-===//
2*061da546Spatrick //
3*061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*061da546Spatrick // See https://llvm.org/LICENSE.txt for license information.
5*061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*061da546Spatrick //
7*061da546Spatrick //===----------------------------------------------------------------------===//
8*061da546Spatrick 
9*061da546Spatrick #ifndef liblldb_ThreadKDP_h_
10*061da546Spatrick #define liblldb_ThreadKDP_h_
11*061da546Spatrick 
12*061da546Spatrick #include <string>
13*061da546Spatrick 
14*061da546Spatrick #include "lldb/Target/Process.h"
15*061da546Spatrick #include "lldb/Target/Thread.h"
16*061da546Spatrick 
17*061da546Spatrick class ProcessKDP;
18*061da546Spatrick 
19*061da546Spatrick class ThreadKDP : public lldb_private::Thread {
20*061da546Spatrick public:
21*061da546Spatrick   ThreadKDP(lldb_private::Process &process, lldb::tid_t tid);
22*061da546Spatrick 
23*061da546Spatrick   virtual ~ThreadKDP();
24*061da546Spatrick 
25*061da546Spatrick   virtual void RefreshStateAfterStop();
26*061da546Spatrick 
27*061da546Spatrick   virtual const char *GetName();
28*061da546Spatrick 
29*061da546Spatrick   virtual const char *GetQueueName();
30*061da546Spatrick 
31*061da546Spatrick   virtual lldb::RegisterContextSP GetRegisterContext();
32*061da546Spatrick 
33*061da546Spatrick   virtual lldb::RegisterContextSP
34*061da546Spatrick   CreateRegisterContextForFrame(lldb_private::StackFrame *frame);
35*061da546Spatrick 
36*061da546Spatrick   void Dump(lldb_private::Log *log, uint32_t index);
37*061da546Spatrick 
38*061da546Spatrick   static bool ThreadIDIsValid(lldb::tid_t thread);
39*061da546Spatrick 
40*061da546Spatrick   bool ShouldStop(bool &step_more);
41*061da546Spatrick 
42*061da546Spatrick   const char *GetBasicInfoAsString();
43*061da546Spatrick 
44*061da546Spatrick   void SetName(const char *name) {
45*061da546Spatrick     if (name && name[0])
46*061da546Spatrick       m_thread_name.assign(name);
47*061da546Spatrick     else
48*061da546Spatrick       m_thread_name.clear();
49*061da546Spatrick   }
50*061da546Spatrick 
51*061da546Spatrick   lldb::addr_t GetThreadDispatchQAddr() { return m_thread_dispatch_qaddr; }
52*061da546Spatrick 
53*061da546Spatrick   void SetThreadDispatchQAddr(lldb::addr_t thread_dispatch_qaddr) {
54*061da546Spatrick     m_thread_dispatch_qaddr = thread_dispatch_qaddr;
55*061da546Spatrick   }
56*061da546Spatrick 
57*061da546Spatrick   void SetStopInfoFrom_KDP_EXCEPTION(
58*061da546Spatrick       const lldb_private::DataExtractor &exc_reply_packet);
59*061da546Spatrick 
60*061da546Spatrick protected:
61*061da546Spatrick   friend class ProcessKDP;
62*061da546Spatrick 
63*061da546Spatrick   // Member variables.
64*061da546Spatrick   std::string m_thread_name;
65*061da546Spatrick   std::string m_dispatch_queue_name;
66*061da546Spatrick   lldb::addr_t m_thread_dispatch_qaddr;
67*061da546Spatrick   lldb::StopInfoSP m_cached_stop_info_sp;
68*061da546Spatrick   // Protected member functions.
69*061da546Spatrick   virtual bool CalculateStopInfo();
70*061da546Spatrick };
71*061da546Spatrick 
72*061da546Spatrick #endif // liblldb_ThreadKDP_h_
73