1254721Semaste//===-- POSIXThread.h -------------------------------------------*- C++ -*-===// 2254721Semaste// 3254721Semaste// The LLVM Compiler Infrastructure 4254721Semaste// 5254721Semaste// This file is distributed under the University of Illinois Open Source 6254721Semaste// License. See LICENSE.TXT for details. 7254721Semaste// 8254721Semaste//===----------------------------------------------------------------------===// 9254721Semaste 10254721Semaste#ifndef liblldb_POSIXThread_H_ 11254721Semaste#define liblldb_POSIXThread_H_ 12254721Semaste 13254721Semaste// C Includes 14254721Semaste// C++ Includes 15254721Semaste#include <memory> 16254721Semaste#include <string> 17254721Semaste 18254721Semaste// Other libraries and framework includes 19254721Semaste#include "lldb/Target/Thread.h" 20254721Semaste#include "RegisterContextPOSIX.h" 21254721Semaste 22254721Semasteclass ProcessMessage; 23254721Semasteclass ProcessMonitor; 24263363Semasteclass POSIXBreakpointProtocol; 25254721Semaste 26254721Semaste//------------------------------------------------------------------------------ 27254721Semaste// @class POSIXThread 28254721Semaste// @brief Abstraction of a POSIX thread. 29254721Semasteclass POSIXThread 30254721Semaste : public lldb_private::Thread 31254721Semaste{ 32254721Semastepublic: 33254721Semaste POSIXThread(lldb_private::Process &process, lldb::tid_t tid); 34254721Semaste 35254721Semaste virtual ~POSIXThread(); 36254721Semaste 37254721Semaste void 38254721Semaste RefreshStateAfterStop(); 39254721Semaste 40254721Semaste virtual void 41254721Semaste WillResume(lldb::StateType resume_state); 42254721Semaste 43254721Semaste // This notifies the thread when a private stop occurs. 44254721Semaste virtual void 45254721Semaste DidStop (); 46254721Semaste 47254721Semaste const char * 48254721Semaste GetInfo(); 49254721Semaste 50254721Semaste void 51254721Semaste SetName (const char *name); 52254721Semaste 53254721Semaste const char * 54254721Semaste GetName (); 55254721Semaste 56254721Semaste virtual lldb::RegisterContextSP 57254721Semaste GetRegisterContext(); 58254721Semaste 59254721Semaste virtual lldb::RegisterContextSP 60254721Semaste CreateRegisterContextForFrame (lldb_private::StackFrame *frame); 61254721Semaste 62263363Semaste virtual lldb::addr_t 63263363Semaste GetThreadPointer (); 64263363Semaste 65254721Semaste //-------------------------------------------------------------------------- 66254721Semaste // These functions provide a mapping from the register offset 67254721Semaste // back to the register index or name for use in debugging or log 68254721Semaste // output. 69254721Semaste 70254721Semaste unsigned 71254721Semaste GetRegisterIndexFromOffset(unsigned offset); 72254721Semaste 73254721Semaste const char * 74254721Semaste GetRegisterName(unsigned reg); 75254721Semaste 76254721Semaste const char * 77254721Semaste GetRegisterNameFromOffset(unsigned offset); 78254721Semaste 79254721Semaste //-------------------------------------------------------------------------- 80254721Semaste // These methods form a specialized interface to POSIX threads. 81254721Semaste // 82269024Semaste bool Resume(); 83269024Semaste 84254721Semaste void Notify(const ProcessMessage &message); 85254721Semaste 86254721Semaste //-------------------------------------------------------------------------- 87254721Semaste // These methods provide an interface to watchpoints 88254721Semaste // 89254721Semaste bool EnableHardwareWatchpoint(lldb_private::Watchpoint *wp); 90254721Semaste 91254721Semaste bool DisableHardwareWatchpoint(lldb_private::Watchpoint *wp); 92254721Semaste 93254721Semaste uint32_t NumSupportedHardwareWatchpoints(); 94254721Semaste 95254721Semaste uint32_t FindVacantWatchpointIndex(); 96254721Semaste 97254721Semasteprotected: 98263363Semaste POSIXBreakpointProtocol * 99263363Semaste GetPOSIXBreakpointProtocol () 100254721Semaste { 101254721Semaste if (!m_reg_context_sp) 102254721Semaste m_reg_context_sp = GetRegisterContext(); 103263363Semaste return m_posix_thread; 104254721Semaste } 105254721Semaste 106254721Semaste std::unique_ptr<lldb_private::StackFrame> m_frame_ap; 107254721Semaste 108254721Semaste lldb::BreakpointSiteSP m_breakpoint; 109254721Semaste 110254721Semaste bool m_thread_name_valid; 111254721Semaste std::string m_thread_name; 112263363Semaste POSIXBreakpointProtocol *m_posix_thread; 113254721Semaste 114254721Semaste ProcessMonitor & 115254721Semaste GetMonitor(); 116254721Semaste 117254721Semaste virtual bool 118254721Semaste CalculateStopInfo(); 119254721Semaste 120254721Semaste void BreakNotify(const ProcessMessage &message); 121254721Semaste void WatchNotify(const ProcessMessage &message); 122254721Semaste virtual void TraceNotify(const ProcessMessage &message); 123254721Semaste void LimboNotify(const ProcessMessage &message); 124254721Semaste void SignalNotify(const ProcessMessage &message); 125254721Semaste void SignalDeliveredNotify(const ProcessMessage &message); 126254721Semaste void CrashNotify(const ProcessMessage &message); 127254721Semaste void ThreadNotify(const ProcessMessage &message); 128254721Semaste void ExitNotify(const ProcessMessage &message); 129263363Semaste void ExecNotify(const ProcessMessage &message); 130254721Semaste 131254721Semaste lldb_private::Unwind * 132254721Semaste GetUnwinder(); 133254721Semaste}; 134254721Semaste 135254721Semaste#endif // #ifndef liblldb_POSIXThread_H_ 136