1*061da546Spatrick //===-- NativeThreadNetBSD.h ---------------------------------- -*- C++ -*-===// 2*061da546Spatrick // 3*061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*061da546Spatrick // See https://llvm.org/LICENSE.txt for license information. 5*061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*061da546Spatrick // 7*061da546Spatrick //===----------------------------------------------------------------------===// 8*061da546Spatrick 9*061da546Spatrick #ifndef liblldb_NativeThreadNetBSD_H_ 10*061da546Spatrick #define liblldb_NativeThreadNetBSD_H_ 11*061da546Spatrick 12*061da546Spatrick #include "lldb/Host/common/NativeThreadProtocol.h" 13*061da546Spatrick 14*061da546Spatrick #include "Plugins/Process/NetBSD/NativeRegisterContextNetBSD.h" 15*061da546Spatrick 16*061da546Spatrick #include <csignal> 17*061da546Spatrick #include <map> 18*061da546Spatrick #include <string> 19*061da546Spatrick 20*061da546Spatrick namespace lldb_private { 21*061da546Spatrick namespace process_netbsd { 22*061da546Spatrick 23*061da546Spatrick class NativeProcessNetBSD; 24*061da546Spatrick 25*061da546Spatrick class NativeThreadNetBSD : public NativeThreadProtocol { 26*061da546Spatrick friend class NativeProcessNetBSD; 27*061da546Spatrick 28*061da546Spatrick public: 29*061da546Spatrick NativeThreadNetBSD(NativeProcessNetBSD &process, lldb::tid_t tid); 30*061da546Spatrick 31*061da546Spatrick // NativeThreadProtocol Interface 32*061da546Spatrick std::string GetName() override; 33*061da546Spatrick 34*061da546Spatrick lldb::StateType GetState() override; 35*061da546Spatrick 36*061da546Spatrick bool GetStopReason(ThreadStopInfo &stop_info, 37*061da546Spatrick std::string &description) override; 38*061da546Spatrick 39*061da546Spatrick NativeRegisterContextNetBSD &GetRegisterContext() override; 40*061da546Spatrick 41*061da546Spatrick Status SetWatchpoint(lldb::addr_t addr, size_t size, uint32_t watch_flags, 42*061da546Spatrick bool hardware) override; 43*061da546Spatrick 44*061da546Spatrick Status RemoveWatchpoint(lldb::addr_t addr) override; 45*061da546Spatrick 46*061da546Spatrick Status SetHardwareBreakpoint(lldb::addr_t addr, size_t size) override; 47*061da546Spatrick 48*061da546Spatrick Status RemoveHardwareBreakpoint(lldb::addr_t addr) override; 49*061da546Spatrick 50*061da546Spatrick private: 51*061da546Spatrick // Interface for friend classes 52*061da546Spatrick 53*061da546Spatrick Status Resume(); 54*061da546Spatrick Status SingleStep(); 55*061da546Spatrick Status Suspend(); 56*061da546Spatrick 57*061da546Spatrick void SetStoppedBySignal(uint32_t signo, const siginfo_t *info = nullptr); 58*061da546Spatrick void SetStoppedByBreakpoint(); 59*061da546Spatrick void SetStoppedByTrace(); 60*061da546Spatrick void SetStoppedByExec(); 61*061da546Spatrick void SetStoppedByWatchpoint(uint32_t wp_index); 62*061da546Spatrick void SetStoppedWithNoReason(); 63*061da546Spatrick void SetStopped(); 64*061da546Spatrick void SetRunning(); 65*061da546Spatrick void SetStepping(); 66*061da546Spatrick 67*061da546Spatrick Status CopyWatchpointsFrom(NativeThreadNetBSD& source); 68*061da546Spatrick 69*061da546Spatrick // Member Variables 70*061da546Spatrick lldb::StateType m_state; 71*061da546Spatrick ThreadStopInfo m_stop_info; 72*061da546Spatrick std::unique_ptr<NativeRegisterContextNetBSD> m_reg_context_up; 73*061da546Spatrick std::string m_stop_description; 74*061da546Spatrick using WatchpointIndexMap = std::map<lldb::addr_t, uint32_t>; 75*061da546Spatrick WatchpointIndexMap m_watchpoint_index_map; 76*061da546Spatrick WatchpointIndexMap m_hw_break_index_map; 77*061da546Spatrick }; 78*061da546Spatrick 79*061da546Spatrick typedef std::shared_ptr<NativeThreadNetBSD> NativeThreadNetBSDSP; 80*061da546Spatrick } // namespace process_netbsd 81*061da546Spatrick } // namespace lldb_private 82*061da546Spatrick 83*061da546Spatrick #endif // #ifndef liblldb_NativeThreadNetBSD_H_ 84