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/Target/Process.h" 16 #include "lldb/Target/Thread.h" 17 18 class StringExtractor; 19 class ProcessGDBRemote; 20 21 class ThreadGDBRemote : public lldb_private::Thread 22 { 23 public: 24 ThreadGDBRemote (ProcessGDBRemote &process, lldb::tid_t tid); 25 26 virtual 27 ~ThreadGDBRemote (); 28 29 virtual bool 30 WillResume (lldb::StateType resume_state); 31 32 virtual void 33 RefreshStateAfterStop(); 34 35 virtual const char * 36 GetName (); 37 38 virtual const char * 39 GetQueueName (); 40 41 virtual lldb::RegisterContextSP 42 GetRegisterContext (); 43 44 virtual lldb::RegisterContextSP 45 CreateRegisterContextForFrame (lldb_private::StackFrame *frame); 46 47 virtual void 48 ClearStackFrames (); 49 50 ProcessGDBRemote & 51 GetGDBProcess () 52 { 53 return (ProcessGDBRemote &)m_process; 54 } 55 56 const ProcessGDBRemote & 57 GetGDBProcess () const 58 { 59 return (ProcessGDBRemote &)m_process; 60 } 61 62 void 63 Dump (lldb_private::Log *log, uint32_t index); 64 65 static bool 66 ThreadIDIsValid (lldb::tid_t thread); 67 68 bool 69 ShouldStop (bool &step_more); 70 71 const char * 72 GetBasicInfoAsString (); 73 74 void 75 SetName (const char *name) 76 { 77 if (name && name[0]) 78 m_thread_name.assign (name); 79 else 80 m_thread_name.clear(); 81 } 82 83 lldb::addr_t 84 GetThreadDispatchQAddr () 85 { 86 return m_thread_dispatch_qaddr; 87 } 88 89 void 90 SetThreadDispatchQAddr (lldb::addr_t thread_dispatch_qaddr) 91 { 92 m_thread_dispatch_qaddr = thread_dispatch_qaddr; 93 } 94 95 protected: 96 97 friend class ProcessGDBRemote; 98 99 bool 100 PrivateSetRegisterValue (uint32_t reg, 101 StringExtractor &response); 102 103 //------------------------------------------------------------------ 104 // Member variables. 105 //------------------------------------------------------------------ 106 std::string m_thread_name; 107 std::string m_dispatch_queue_name; 108 lldb::addr_t m_thread_dispatch_qaddr; 109 //------------------------------------------------------------------ 110 // Member variables. 111 //------------------------------------------------------------------ 112 113 void 114 SetStopInfoFromPacket (StringExtractor &stop_packet, uint32_t stop_id); 115 116 virtual lldb::StopInfoSP 117 GetPrivateStopReason (); 118 119 120 }; 121 122 #endif // liblldb_ThreadGDBRemote_h_ 123