POSIXThread.h revision 102b2c2681c9a830afe25bfea35557421905e42c
1//===-- POSIXThread.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_POSIXThread_H_ 11#define liblldb_POSIXThread_H_ 12 13// C Includes 14// C++ Includes 15#include <memory> 16 17// Other libraries and framework includes 18#include "lldb/Target/Thread.h" 19#include "RegisterContextPOSIX.h" 20 21class ProcessMessage; 22class ProcessMonitor; 23class RegisterContextPOSIX; 24 25//------------------------------------------------------------------------------ 26// @class POSIXThread 27// @brief Abstraction of a linux process (thread). 28class POSIXThread 29 : public lldb_private::Thread 30{ 31public: 32 POSIXThread(lldb_private::Process &process, lldb::tid_t tid); 33 34 virtual ~POSIXThread(); 35 36 void 37 RefreshStateAfterStop(); 38 39 bool 40 WillResume(lldb::StateType resume_state); 41 42 const char * 43 GetInfo(); 44 45 virtual lldb::RegisterContextSP 46 GetRegisterContext(); 47 48 virtual lldb::RegisterContextSP 49 CreateRegisterContextForFrame (lldb_private::StackFrame *frame); 50 51 //-------------------------------------------------------------------------- 52 // These static functions provide a mapping from the register offset 53 // back to the register index or name for use in debugging or log 54 // output. 55 56 static unsigned 57 GetRegisterIndexFromOffset(unsigned offset); 58 59 static const char * 60 GetRegisterName(unsigned reg); 61 62 static const char * 63 GetRegisterNameFromOffset(unsigned offset); 64 65 //-------------------------------------------------------------------------- 66 // These methods form a specialized interface to linux threads. 67 // 68 bool Resume(); 69 70 void Notify(const ProcessMessage &message); 71 72private: 73 RegisterContextPOSIX * 74 GetRegisterContextPOSIX () 75 { 76 if (!m_reg_context_sp) 77 m_reg_context_sp = GetRegisterContext(); 78#if 0 79 return dynamic_cast<RegisterContextPOSIX*>(m_reg_context_sp.get()); 80#endif 81 return (RegisterContextPOSIX *)m_reg_context_sp.get(); 82 } 83 84 std::unique_ptr<lldb_private::StackFrame> m_frame_ap; 85 86 lldb::BreakpointSiteSP m_breakpoint; 87 lldb::StopInfoSP m_stop_info; 88 89 ProcessMonitor & 90 GetMonitor(); 91 92 lldb::StopInfoSP 93 GetPrivateStopReason(); 94 95 void BreakNotify(const ProcessMessage &message); 96 void TraceNotify(const ProcessMessage &message); 97 void LimboNotify(const ProcessMessage &message); 98 void SignalNotify(const ProcessMessage &message); 99 void SignalDeliveredNotify(const ProcessMessage &message); 100 void CrashNotify(const ProcessMessage &message); 101 void ThreadNotify(const ProcessMessage &message); 102 103 lldb_private::Unwind * 104 GetUnwinder(); 105}; 106 107#endif // #ifndef liblldb_POSIXThread_H_ 108