xref: /openbsd-src/gnu/llvm/lldb/source/Plugins/Process/MacOSX-Kernel/ThreadKDP.h (revision f6aab3d83b51b91c24247ad2c2573574de475a82)
1061da546Spatrick //===-- ThreadKDP.h ---------------------------------------*- C++ -*-===//
2061da546Spatrick //
3061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4061da546Spatrick // See https://llvm.org/LICENSE.txt for license information.
5061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6061da546Spatrick //
7061da546Spatrick //===----------------------------------------------------------------------===//
8061da546Spatrick 
9dda28197Spatrick #ifndef LLDB_SOURCE_PLUGINS_PROCESS_MACOSX_KERNEL_THREADKDP_H
10dda28197Spatrick #define LLDB_SOURCE_PLUGINS_PROCESS_MACOSX_KERNEL_THREADKDP_H
11061da546Spatrick 
12061da546Spatrick #include <string>
13061da546Spatrick 
14061da546Spatrick #include "lldb/Target/Process.h"
15061da546Spatrick #include "lldb/Target/Thread.h"
16061da546Spatrick 
17061da546Spatrick class ProcessKDP;
18061da546Spatrick 
19061da546Spatrick class ThreadKDP : public lldb_private::Thread {
20061da546Spatrick public:
21061da546Spatrick   ThreadKDP(lldb_private::Process &process, lldb::tid_t tid);
22061da546Spatrick 
23*f6aab3d8Srobert   ~ThreadKDP() override;
24061da546Spatrick 
25be691f3bSpatrick   void RefreshStateAfterStop() override;
26061da546Spatrick 
27be691f3bSpatrick   const char *GetName() override;
28061da546Spatrick 
29be691f3bSpatrick   const char *GetQueueName() override;
30061da546Spatrick 
31be691f3bSpatrick   lldb::RegisterContextSP GetRegisterContext() override;
32061da546Spatrick 
33be691f3bSpatrick   lldb::RegisterContextSP
34be691f3bSpatrick   CreateRegisterContextForFrame(lldb_private::StackFrame *frame) override;
35061da546Spatrick 
36061da546Spatrick   void Dump(lldb_private::Log *log, uint32_t index);
37061da546Spatrick 
38061da546Spatrick   static bool ThreadIDIsValid(lldb::tid_t thread);
39061da546Spatrick 
40061da546Spatrick   bool ShouldStop(bool &step_more);
41061da546Spatrick 
42061da546Spatrick   const char *GetBasicInfoAsString();
43061da546Spatrick 
SetName(const char * name)44be691f3bSpatrick   void SetName(const char *name) override {
45061da546Spatrick     if (name && name[0])
46061da546Spatrick       m_thread_name.assign(name);
47061da546Spatrick     else
48061da546Spatrick       m_thread_name.clear();
49061da546Spatrick   }
50061da546Spatrick 
GetThreadDispatchQAddr()51061da546Spatrick   lldb::addr_t GetThreadDispatchQAddr() { return m_thread_dispatch_qaddr; }
52061da546Spatrick 
SetThreadDispatchQAddr(lldb::addr_t thread_dispatch_qaddr)53061da546Spatrick   void SetThreadDispatchQAddr(lldb::addr_t thread_dispatch_qaddr) {
54061da546Spatrick     m_thread_dispatch_qaddr = thread_dispatch_qaddr;
55061da546Spatrick   }
56061da546Spatrick 
57061da546Spatrick   void SetStopInfoFrom_KDP_EXCEPTION(
58061da546Spatrick       const lldb_private::DataExtractor &exc_reply_packet);
59061da546Spatrick 
60061da546Spatrick protected:
61061da546Spatrick   friend class ProcessKDP;
62061da546Spatrick 
63061da546Spatrick   // Member variables.
64061da546Spatrick   std::string m_thread_name;
65061da546Spatrick   std::string m_dispatch_queue_name;
66061da546Spatrick   lldb::addr_t m_thread_dispatch_qaddr;
67061da546Spatrick   lldb::StopInfoSP m_cached_stop_info_sp;
68061da546Spatrick   // Protected member functions.
69be691f3bSpatrick   bool CalculateStopInfo() override;
70061da546Spatrick };
71061da546Spatrick 
72dda28197Spatrick #endif // LLDB_SOURCE_PLUGINS_PROCESS_MACOSX_KERNEL_THREADKDP_H
73