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