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