|  | //===-- ThreadMemory.h -----------------------------------------*- C++ -*-===// | 
|  | // | 
|  | //                     The LLVM Compiler Infrastructure | 
|  | // | 
|  | // This file is distributed under the University of Illinois Open Source | 
|  | // License. See LICENSE.TXT for details. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #ifndef liblldb_ThreadMemory_h_ | 
|  | #define liblldb_ThreadMemory_h_ | 
|  |  | 
|  | #include "lldb/Target/Thread.h" | 
|  |  | 
|  | class ThreadMemory : | 
|  | public lldb_private::Thread | 
|  | { | 
|  | public: | 
|  |  | 
|  | ThreadMemory (lldb_private::Process &process, | 
|  | lldb::tid_t tid, | 
|  | const lldb::ValueObjectSP &thread_info_valobj_sp); | 
|  |  | 
|  | ThreadMemory (lldb_private::Process &process, | 
|  | lldb::tid_t tid, | 
|  | const char *name, | 
|  | const char *queue, | 
|  | lldb::addr_t register_data_addr); | 
|  |  | 
|  | virtual | 
|  | ~ThreadMemory(); | 
|  |  | 
|  | //------------------------------------------------------------------ | 
|  | // lldb_private::Thread methods | 
|  | //------------------------------------------------------------------ | 
|  | virtual lldb::RegisterContextSP | 
|  | GetRegisterContext (); | 
|  |  | 
|  | virtual lldb::RegisterContextSP | 
|  | CreateRegisterContextForFrame (lldb_private::Frame *frame); | 
|  |  | 
|  | virtual bool | 
|  | CalculateStopInfo (); | 
|  |  | 
|  | virtual const char * | 
|  | GetInfo () | 
|  | { | 
|  | if (m_backing_thread_sp) | 
|  | m_backing_thread_sp->GetInfo(); | 
|  | return NULL; | 
|  | } | 
|  |  | 
|  | virtual const char * | 
|  | GetName () | 
|  | { | 
|  | if (!m_name.empty()) | 
|  | return m_name.c_str(); | 
|  | if (m_backing_thread_sp) | 
|  | m_backing_thread_sp->GetName(); | 
|  | return NULL; | 
|  | } | 
|  |  | 
|  | virtual const char * | 
|  | GetQueueName () | 
|  | { | 
|  | if (!m_queue.empty()) | 
|  | return m_queue.c_str(); | 
|  | if (m_backing_thread_sp) | 
|  | m_backing_thread_sp->GetQueueName(); | 
|  | return NULL; | 
|  | } | 
|  |  | 
|  | virtual void | 
|  | WillResume (lldb::StateType resume_state); | 
|  |  | 
|  | virtual void | 
|  | DidResume () | 
|  | { | 
|  | if (m_backing_thread_sp) | 
|  | m_backing_thread_sp->DidResume(); | 
|  | } | 
|  |  | 
|  | virtual lldb::user_id_t | 
|  | GetProtocolID () const | 
|  | { | 
|  | if (m_backing_thread_sp) | 
|  | return m_backing_thread_sp->GetProtocolID(); | 
|  | return Thread::GetProtocolID(); | 
|  | } | 
|  |  | 
|  | virtual void | 
|  | RefreshStateAfterStop(); | 
|  |  | 
|  | lldb::ValueObjectSP & | 
|  | GetValueObject () | 
|  | { | 
|  | return m_thread_info_valobj_sp; | 
|  | } | 
|  |  | 
|  | virtual void | 
|  | ClearStackFrames (); | 
|  |  | 
|  | virtual void | 
|  | ClearBackingThread () | 
|  | { | 
|  | m_backing_thread_sp.reset(); | 
|  | } | 
|  |  | 
|  | virtual bool | 
|  | SetBackingThread (const lldb::ThreadSP &thread_sp) | 
|  | { | 
|  | //printf ("Thread 0x%llx is being backed by thread 0x%llx\n", GetID(), thread_sp->GetID()); | 
|  | m_backing_thread_sp = thread_sp; | 
|  | return (bool)thread_sp; | 
|  | } | 
|  |  | 
|  | virtual lldb::ThreadSP | 
|  | GetBackingThread () const | 
|  | { | 
|  | return m_backing_thread_sp; | 
|  | } | 
|  |  | 
|  | protected: | 
|  |  | 
|  | virtual bool | 
|  | IsOperatingSystemPluginThread () const | 
|  | { | 
|  | return true; | 
|  | } | 
|  |  | 
|  |  | 
|  | //------------------------------------------------------------------ | 
|  | // For ThreadMemory and subclasses | 
|  | //------------------------------------------------------------------ | 
|  | // If this memory thread is actually represented by a thread from the | 
|  | // lldb_private::Process subclass, then fill in the thread here and | 
|  | // all APIs will be routed through this thread object. If m_backing_thread_sp | 
|  | // is empty, then this thread is simply in memory with no representation | 
|  | // through the process plug-in. | 
|  | lldb::ThreadSP m_backing_thread_sp; | 
|  | lldb::ValueObjectSP m_thread_info_valobj_sp; | 
|  | std::string m_name; | 
|  | std::string m_queue; | 
|  | lldb::addr_t m_register_data_addr; | 
|  | private: | 
|  | //------------------------------------------------------------------ | 
|  | // For ThreadMemory only | 
|  | //------------------------------------------------------------------ | 
|  | DISALLOW_COPY_AND_ASSIGN (ThreadMemory); | 
|  | }; | 
|  |  | 
|  | #endif  // liblldb_ThreadMemory_h_ |