1061da546Spatrick //===-- NativeThreadOpenBSD.h ---------------------------------- -*- C++ -*-===// 2061da546Spatrick // 3061da546Spatrick // The LLVM Compiler Infrastructure 4061da546Spatrick // 5061da546Spatrick // This file is distributed under the University of Illinois Open Source 6061da546Spatrick // License. See LICENSE.TXT for details. 7061da546Spatrick // 8061da546Spatrick //===----------------------------------------------------------------------===// 9061da546Spatrick 10061da546Spatrick #ifndef liblldb_NativeThreadOpenBSD_H_ 11061da546Spatrick #define liblldb_NativeThreadOpenBSD_H_ 12061da546Spatrick 13061da546Spatrick #include "lldb/Host/common/NativeThreadProtocol.h" 14061da546Spatrick 15061da546Spatrick #include <csignal> 16061da546Spatrick #include <map> 17061da546Spatrick #include <string> 18061da546Spatrick 19061da546Spatrick namespace lldb_private { 20061da546Spatrick namespace process_openbsd { 21061da546Spatrick 22061da546Spatrick class NativeProcessOpenBSD; 23061da546Spatrick 24061da546Spatrick class NativeThreadOpenBSD : public NativeThreadProtocol { 25061da546Spatrick friend class NativeProcessOpenBSD; 26061da546Spatrick 27061da546Spatrick public: 28061da546Spatrick NativeThreadOpenBSD(NativeProcessOpenBSD &process, lldb::tid_t tid); 29061da546Spatrick 30061da546Spatrick // --------------------------------------------------------------------- 31061da546Spatrick // NativeThreadProtocol Interface 32061da546Spatrick // --------------------------------------------------------------------- 33061da546Spatrick std::string GetName() override; 34061da546Spatrick 35061da546Spatrick lldb::StateType GetState() override; 36061da546Spatrick 37061da546Spatrick bool GetStopReason(ThreadStopInfo &stop_info, 38061da546Spatrick std::string &description) override; 39061da546Spatrick 40061da546Spatrick NativeRegisterContext& GetRegisterContext() override; 41061da546Spatrick 42*a119297bSmortimer // OpenBSD does not expose hardware debug registers to userland 43*a119297bSmortimer // so these functions will just return a Status error. 44*a119297bSmortimer Status SetHardwareBreakpoint(lldb::addr_t addr, size_t size) override; 45*a119297bSmortimer Status RemoveHardwareBreakpoint(lldb::addr_t addr) override; 46*a119297bSmortimer 47*a119297bSmortimer // Similarly, until software watchpoints are implemented in lldb, 48*a119297bSmortimer // these functions will just return a Status error. 49061da546Spatrick Status SetWatchpoint(lldb::addr_t addr, size_t size, uint32_t watch_flags, 50061da546Spatrick bool hardware) override; 51061da546Spatrick Status RemoveWatchpoint(lldb::addr_t addr) override; 52061da546Spatrick 53061da546Spatrick private: 54061da546Spatrick // --------------------------------------------------------------------- 55061da546Spatrick // Interface for friend classes 56061da546Spatrick // --------------------------------------------------------------------- 57061da546Spatrick 58061da546Spatrick void SetStoppedBySignal(uint32_t signo, const siginfo_t *info = nullptr); 59061da546Spatrick void SetStoppedByBreakpoint(); 60061da546Spatrick void SetStoppedByTrace(); 61061da546Spatrick void SetStoppedByExec(); 62061da546Spatrick void SetStopped(); 63061da546Spatrick void SetRunning(); 64061da546Spatrick void SetStepping(); 65061da546Spatrick 66061da546Spatrick // --------------------------------------------------------------------- 67061da546Spatrick // Member Variables 68061da546Spatrick // --------------------------------------------------------------------- 69061da546Spatrick lldb::StateType m_state; 70061da546Spatrick ThreadStopInfo m_stop_info; 71061da546Spatrick std::unique_ptr<NativeRegisterContext> m_reg_context_up; 72061da546Spatrick std::string m_stop_description; 73061da546Spatrick }; 74061da546Spatrick 75061da546Spatrick typedef std::shared_ptr<NativeThreadOpenBSD> NativeThreadOpenBSDSP; 76061da546Spatrick } // namespace process_openbsd 77061da546Spatrick } // namespace lldb_private 78061da546Spatrick 79061da546Spatrick #endif // #ifndef liblldb_NativeThreadOpenBSD_H_ 80