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