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