forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			136 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			136 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C++
		
	
	
	
| //===-- POSIXThread.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_POSIXThread_H_
 | |
| #define liblldb_POSIXThread_H_
 | |
| 
 | |
| // C Includes
 | |
| // C++ Includes
 | |
| #include <memory>
 | |
| #include <string>
 | |
| 
 | |
| // Other libraries and framework includes
 | |
| #include "lldb/Target/Thread.h"
 | |
| #include "Plugins/Process/Utility/RegisterContextPOSIX.h"
 | |
| 
 | |
| class ProcessMessage;
 | |
| class ProcessMonitor;
 | |
| class POSIXBreakpointProtocol;
 | |
| 
 | |
| //------------------------------------------------------------------------------
 | |
| // @class POSIXThread
 | |
| // @brief Abstraction of a POSIX thread.
 | |
| class POSIXThread
 | |
|     : public lldb_private::Thread
 | |
| {
 | |
| public:
 | |
|     POSIXThread(lldb_private::Process &process, lldb::tid_t tid);
 | |
| 
 | |
|     virtual ~POSIXThread();
 | |
| 
 | |
|     void
 | |
|     RefreshStateAfterStop();
 | |
| 
 | |
|     virtual void
 | |
|     WillResume(lldb::StateType resume_state);
 | |
| 
 | |
|     // This notifies the thread when a private stop occurs.
 | |
|     virtual void
 | |
|     DidStop ();
 | |
| 
 | |
|     const char *
 | |
|     GetInfo();
 | |
| 
 | |
|     void
 | |
|     SetName (const char *name);
 | |
| 
 | |
|     const char *
 | |
|     GetName ();
 | |
| 
 | |
|     virtual lldb::RegisterContextSP
 | |
|     GetRegisterContext();
 | |
| 
 | |
|     virtual lldb::RegisterContextSP
 | |
|     CreateRegisterContextForFrame (lldb_private::StackFrame *frame);
 | |
| 
 | |
|     virtual lldb::addr_t
 | |
|     GetThreadPointer ();
 | |
| 
 | |
|     //--------------------------------------------------------------------------
 | |
|     // These functions provide a mapping from the register offset
 | |
|     // back to the register index or name for use in debugging or log
 | |
|     // output.
 | |
| 
 | |
|     unsigned
 | |
|     GetRegisterIndexFromOffset(unsigned offset);
 | |
| 
 | |
|     const char *
 | |
|     GetRegisterName(unsigned reg);
 | |
| 
 | |
|     const char *
 | |
|     GetRegisterNameFromOffset(unsigned offset);
 | |
| 
 | |
|     //--------------------------------------------------------------------------
 | |
|     // These methods form a specialized interface to POSIX threads.
 | |
|     //
 | |
|     bool Resume();
 | |
| 
 | |
|     void Notify(const ProcessMessage &message);
 | |
| 
 | |
|     //--------------------------------------------------------------------------
 | |
|     // These methods provide an interface to watchpoints
 | |
|     //
 | |
|     bool EnableHardwareWatchpoint(lldb_private::Watchpoint *wp);
 | |
| 
 | |
|     bool DisableHardwareWatchpoint(lldb_private::Watchpoint *wp);
 | |
| 
 | |
|     uint32_t NumSupportedHardwareWatchpoints();
 | |
| 
 | |
|     uint32_t FindVacantWatchpointIndex();
 | |
| 
 | |
| protected:
 | |
|     POSIXBreakpointProtocol *
 | |
|     GetPOSIXBreakpointProtocol ()
 | |
|     {
 | |
|         if (!m_reg_context_sp)
 | |
|             m_reg_context_sp = GetRegisterContext();
 | |
|         return m_posix_thread;
 | |
|     }
 | |
|     
 | |
|     std::unique_ptr<lldb_private::StackFrame> m_frame_ap;
 | |
| 
 | |
|     lldb::BreakpointSiteSP m_breakpoint;
 | |
| 
 | |
|     bool m_thread_name_valid;
 | |
|     std::string m_thread_name;
 | |
|     POSIXBreakpointProtocol *m_posix_thread;
 | |
| 
 | |
|     ProcessMonitor &
 | |
|     GetMonitor();
 | |
| 
 | |
|     virtual bool
 | |
|     CalculateStopInfo();
 | |
| 
 | |
|     void BreakNotify(const ProcessMessage &message);
 | |
|     void WatchNotify(const ProcessMessage &message);
 | |
|     virtual void TraceNotify(const ProcessMessage &message);
 | |
|     void LimboNotify(const ProcessMessage &message);
 | |
|     void SignalNotify(const ProcessMessage &message);
 | |
|     void SignalDeliveredNotify(const ProcessMessage &message);
 | |
|     void CrashNotify(const ProcessMessage &message);
 | |
|     void ThreadNotify(const ProcessMessage &message);
 | |
|     void ExitNotify(const ProcessMessage &message);
 | |
|     void ExecNotify(const ProcessMessage &message);
 | |
| 
 | |
|     lldb_private::Unwind *
 | |
|     GetUnwinder();
 | |
| };
 | |
| 
 | |
| #endif // #ifndef liblldb_POSIXThread_H_
 |