1*061da546Spatrick //===-- NativeThreadWindows.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_NativeThreadWindows_h_ 10*061da546Spatrick #define liblldb_NativeThreadWindows_h_ 11*061da546Spatrick 12*061da546Spatrick #include "lldb/Host/HostThread.h" 13*061da546Spatrick #include "lldb/Host/common/NativeThreadProtocol.h" 14*061da546Spatrick #include "lldb/lldb-private-forward.h" 15*061da546Spatrick 16*061da546Spatrick #include "NativeRegisterContextWindows.h" 17*061da546Spatrick 18*061da546Spatrick namespace lldb_private { 19*061da546Spatrick 20*061da546Spatrick class NativeProcessWindows; 21*061da546Spatrick 22*061da546Spatrick class NativeThreadWindows : public NativeThreadProtocol { 23*061da546Spatrick public: 24*061da546Spatrick NativeThreadWindows(NativeProcessWindows &process, const HostThread &thread); 25*061da546Spatrick ~NativeThreadWindows()26*061da546Spatrick ~NativeThreadWindows() {} 27*061da546Spatrick 28*061da546Spatrick Status DoStop(); 29*061da546Spatrick Status DoResume(lldb::StateType resume_state); 30*061da546Spatrick 31*061da546Spatrick std::string GetName() override; 32*061da546Spatrick GetState()33*061da546Spatrick lldb::StateType GetState() override { return m_state; } 34*061da546Spatrick GetRegisterContext()35*061da546Spatrick NativeRegisterContextWindows &GetRegisterContext() override { 36*061da546Spatrick return *m_reg_context_up; 37*061da546Spatrick } 38*061da546Spatrick 39*061da546Spatrick bool GetStopReason(ThreadStopInfo &stop_info, 40*061da546Spatrick std::string &description) override; 41*061da546Spatrick 42*061da546Spatrick Status SetWatchpoint(lldb::addr_t addr, size_t size, uint32_t watch_flags, 43*061da546Spatrick bool hardware) override; 44*061da546Spatrick 45*061da546Spatrick Status RemoveWatchpoint(lldb::addr_t addr) override; 46*061da546Spatrick 47*061da546Spatrick Status SetHardwareBreakpoint(lldb::addr_t addr, size_t size) override; 48*061da546Spatrick 49*061da546Spatrick Status RemoveHardwareBreakpoint(lldb::addr_t addr) override; 50*061da546Spatrick 51*061da546Spatrick void SetStopReason(ThreadStopInfo stop_info, std::string description); 52*061da546Spatrick GetHostThread()53*061da546Spatrick const HostThread &GetHostThread() { return m_host_thread; } 54*061da546Spatrick 55*061da546Spatrick protected: 56*061da546Spatrick lldb::StateType m_state = lldb::StateType::eStateInvalid; 57*061da546Spatrick std::string m_name; 58*061da546Spatrick ThreadStopInfo m_stop_info; 59*061da546Spatrick std::string m_stop_description; 60*061da546Spatrick std::unique_ptr<NativeRegisterContextWindows> m_reg_context_up; 61*061da546Spatrick // Cache address and index of the watchpoints and hardware breakpoints since 62*061da546Spatrick // the register context does not. 63*061da546Spatrick using IndexMap = std::map<lldb::addr_t, uint32_t>; 64*061da546Spatrick IndexMap m_watchpoint_index_map; 65*061da546Spatrick IndexMap m_hw_breakpoint_index_map; 66*061da546Spatrick HostThread m_host_thread; 67*061da546Spatrick }; 68*061da546Spatrick } // namespace lldb_private 69*061da546Spatrick 70*061da546Spatrick #endif // #ifndef liblldb_NativeThreadWindows_h_ 71