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