POSIXThread.h revision 102b2c2681c9a830afe25bfea35557421905e42c
12341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen//===-- POSIXThread.h -------------------------------------------*- C++ -*-===// 22341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen// 32341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen// The LLVM Compiler Infrastructure 42341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen// 52341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen// This file is distributed under the University of Illinois Open Source 62341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen// License. See LICENSE.TXT for details. 72341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen// 82341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen//===----------------------------------------------------------------------===// 92341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 102341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen#ifndef liblldb_POSIXThread_H_ 112341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen#define liblldb_POSIXThread_H_ 122341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 132341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen// C Includes 142341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen// C++ Includes 152341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen#include <memory> 162341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 172341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen// Other libraries and framework includes 182341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen#include "lldb/Target/Thread.h" 192341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen#include "RegisterContextPOSIX.h" 202341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 212341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chenclass ProcessMessage; 222341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chenclass ProcessMonitor; 232341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chenclass RegisterContextPOSIX; 242341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 252341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen//------------------------------------------------------------------------------ 262341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen// @class POSIXThread 272341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen// @brief Abstraction of a linux process (thread). 282341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chenclass POSIXThread 292341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen : public lldb_private::Thread 302341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen{ 312341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chenpublic: 325e91e379b3be10738ab5aeae87b47001de16cd7cGreg Clayton POSIXThread(lldb_private::Process &process, lldb::tid_t tid); 332341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 342341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen virtual ~POSIXThread(); 352341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 362341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen void 372341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen RefreshStateAfterStop(); 382341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 392341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen bool 402341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen WillResume(lldb::StateType resume_state); 412341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 422341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen const char * 432341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen GetInfo(); 442341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 452341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen virtual lldb::RegisterContextSP 462341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen GetRegisterContext(); 472341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 482341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen virtual lldb::RegisterContextSP 492341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen CreateRegisterContextForFrame (lldb_private::StackFrame *frame); 502341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 512341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen //-------------------------------------------------------------------------- 522341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen // These static functions provide a mapping from the register offset 532341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen // back to the register index or name for use in debugging or log 542341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen // output. 552341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 562341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen static unsigned 572341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen GetRegisterIndexFromOffset(unsigned offset); 582341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 592341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen static const char * 602341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen GetRegisterName(unsigned reg); 612341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 622341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen static const char * 632341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen GetRegisterNameFromOffset(unsigned offset); 642341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 652341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen //-------------------------------------------------------------------------- 662341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen // These methods form a specialized interface to linux threads. 672341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen // 682341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen bool Resume(); 692341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 702341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen void Notify(const ProcessMessage &message); 712341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 722341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chenprivate: 732341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen RegisterContextPOSIX * 742341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen GetRegisterContextPOSIX () 752341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen { 762341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen if (!m_reg_context_sp) 772341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen m_reg_context_sp = GetRegisterContext(); 782341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen#if 0 792341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen return dynamic_cast<RegisterContextPOSIX*>(m_reg_context_sp.get()); 802341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen#endif 812341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen return (RegisterContextPOSIX *)m_reg_context_sp.get(); 822341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen } 832341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 84102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton std::unique_ptr<lldb_private::StackFrame> m_frame_ap; 852341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 862341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen lldb::BreakpointSiteSP m_breakpoint; 872341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen lldb::StopInfoSP m_stop_info; 882341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 892341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen ProcessMonitor & 902341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen GetMonitor(); 912341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 922341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen lldb::StopInfoSP 932341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen GetPrivateStopReason(); 942341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 952341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen void BreakNotify(const ProcessMessage &message); 962341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen void TraceNotify(const ProcessMessage &message); 972341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen void LimboNotify(const ProcessMessage &message); 982341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen void SignalNotify(const ProcessMessage &message); 992341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen void SignalDeliveredNotify(const ProcessMessage &message); 1002341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen void CrashNotify(const ProcessMessage &message); 101f1fda3748c39c92d2e79aeba0715baffabd3286bMatt Kopec void ThreadNotify(const ProcessMessage &message); 1022341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 1032341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen lldb_private::Unwind * 1042341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen GetUnwinder(); 1052341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen}; 1062341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen 1072341d35bc77ffa8597a85b1ffe50b5653a2ec46dJohnny Chen#endif // #ifndef liblldb_POSIXThread_H_ 108