1 //===-- ThreadGDBRemote.h ---------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef liblldb_ThreadGDBRemote_h_ 11 #define liblldb_ThreadGDBRemote_h_ 12 13 #include <string> 14 15 #include "lldb/Core/StructuredData.h" 16 #include "lldb/Target/Process.h" 17 #include "lldb/Target/Thread.h" 18 19 class StringExtractor; 20 21 namespace lldb_private { 22 namespace process_gdb_remote { 23 24 class ProcessGDBRemote; 25 26 class ThreadGDBRemote : public Thread 27 { 28 public: 29 ThreadGDBRemote (Process &process, lldb::tid_t tid); 30 31 virtual 32 ~ThreadGDBRemote (); 33 34 void 35 WillResume (lldb::StateType resume_state) override; 36 37 void 38 RefreshStateAfterStop() override; 39 40 const char * 41 GetName () override; 42 43 const char * 44 GetQueueName () override; 45 46 lldb::queue_id_t 47 GetQueueID () override; 48 49 lldb::QueueSP 50 GetQueue () override; 51 52 lldb::addr_t 53 GetQueueLibdispatchQueueAddress () override; 54 55 lldb::RegisterContextSP 56 GetRegisterContext () override; 57 58 lldb::RegisterContextSP 59 CreateRegisterContextForFrame (StackFrame *frame) override; 60 61 void 62 Dump (Log *log, uint32_t index); 63 64 static bool 65 ThreadIDIsValid (lldb::tid_t thread); 66 67 bool 68 ShouldStop (bool &step_more); 69 70 const char * 71 GetBasicInfoAsString (); 72 73 void 74 SetName (const char *name) override 75 { 76 if (name && name[0]) 77 m_thread_name.assign (name); 78 else 79 m_thread_name.clear(); 80 } 81 82 lldb::addr_t 83 GetThreadDispatchQAddr () 84 { 85 return m_thread_dispatch_qaddr; 86 } 87 88 void 89 SetThreadDispatchQAddr (lldb::addr_t thread_dispatch_qaddr) 90 { 91 m_thread_dispatch_qaddr = thread_dispatch_qaddr; 92 } 93 94 StructuredData::ObjectSP 95 FetchThreadExtendedInfo () override; 96 97 protected: 98 99 friend class ProcessGDBRemote; 100 101 bool 102 PrivateSetRegisterValue (uint32_t reg, 103 StringExtractor &response); 104 105 //------------------------------------------------------------------ 106 // Member variables. 107 //------------------------------------------------------------------ 108 std::string m_thread_name; 109 std::string m_dispatch_queue_name; 110 lldb::addr_t m_thread_dispatch_qaddr; 111 //------------------------------------------------------------------ 112 // Member variables. 113 //------------------------------------------------------------------ 114 115 void 116 SetStopInfoFromPacket (StringExtractor &stop_packet, uint32_t stop_id); 117 118 bool 119 CalculateStopInfo () override; 120 }; 121 122 } // namespace process_gdb_remote 123 } // namespace lldb_private 124 125 #endif // liblldb_ThreadGDBRemote_h_ 126