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