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