1061da546Spatrick //===-- NativeRegisterContextWindows_WoW64.h --------------------*- C++ -*-===// 2061da546Spatrick // 3061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4061da546Spatrick // See https://llvm.org/LICENSE.txt for license information. 5061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6061da546Spatrick // 7061da546Spatrick //===----------------------------------------------------------------------===// 8061da546Spatrick 9061da546Spatrick #if defined(__x86_64__) || defined(_M_X64) 10061da546Spatrick #ifndef liblldb_NativeRegisterContextWindows_WoW64_h_ 11061da546Spatrick #define liblldb_NativeRegisterContextWindows_WoW64_h_ 12061da546Spatrick 13061da546Spatrick #include "Plugins/Process/Utility/RegisterContext_x86.h" 14061da546Spatrick #include "Plugins/Process/Utility/lldb-x86-register-enums.h" 15061da546Spatrick 16061da546Spatrick #include "NativeRegisterContextWindows.h" 17061da546Spatrick 18061da546Spatrick namespace lldb_private { 19061da546Spatrick 20061da546Spatrick class NativeThreadWindows; 21061da546Spatrick 22061da546Spatrick class NativeRegisterContextWindows_WoW64 : public NativeRegisterContextWindows { 23061da546Spatrick public: 24061da546Spatrick NativeRegisterContextWindows_WoW64(const ArchSpec &target_arch, 25061da546Spatrick NativeThreadProtocol &native_thread); 26061da546Spatrick 27061da546Spatrick uint32_t GetRegisterSetCount() const override; 28061da546Spatrick 29061da546Spatrick const RegisterSet *GetRegisterSet(uint32_t set_index) const override; 30061da546Spatrick 31061da546Spatrick Status ReadRegister(const RegisterInfo *reg_info, 32061da546Spatrick RegisterValue ®_value) override; 33061da546Spatrick 34061da546Spatrick Status WriteRegister(const RegisterInfo *reg_info, 35061da546Spatrick const RegisterValue ®_value) override; 36061da546Spatrick 37*f6aab3d8Srobert Status ReadAllRegisterValues(lldb::WritableDataBufferSP &data_sp) override; 38061da546Spatrick 39061da546Spatrick Status WriteAllRegisterValues(const lldb::DataBufferSP &data_sp) override; 40061da546Spatrick 41061da546Spatrick Status IsWatchpointHit(uint32_t wp_index, bool &is_hit) override; 42061da546Spatrick 43061da546Spatrick Status GetWatchpointHitIndex(uint32_t &wp_index, 44061da546Spatrick lldb::addr_t trap_addr) override; 45061da546Spatrick 46061da546Spatrick Status IsWatchpointVacant(uint32_t wp_index, bool &is_vacant) override; 47061da546Spatrick 48061da546Spatrick bool ClearHardwareWatchpoint(uint32_t wp_index) override; 49061da546Spatrick 50061da546Spatrick Status ClearAllHardwareWatchpoints() override; 51061da546Spatrick 52061da546Spatrick uint32_t SetHardwareWatchpoint(lldb::addr_t addr, size_t size, 53061da546Spatrick uint32_t watch_flags) override; 54061da546Spatrick 55061da546Spatrick lldb::addr_t GetWatchpointAddress(uint32_t wp_index) override; 56061da546Spatrick 57061da546Spatrick uint32_t NumSupportedHardwareWatchpoints() override; 58061da546Spatrick 59061da546Spatrick protected: 60061da546Spatrick Status GPRRead(const uint32_t reg, RegisterValue ®_value); 61061da546Spatrick Status GPRWrite(const uint32_t reg, const RegisterValue ®_value); 62061da546Spatrick 63061da546Spatrick Status DRRead(const uint32_t reg, RegisterValue ®_value); 64061da546Spatrick Status DRWrite(const uint32_t reg, const RegisterValue ®_value); 65061da546Spatrick 66061da546Spatrick private: 67061da546Spatrick Status ApplyHardwareBreakpoint(uint32_t wp_index, lldb::addr_t addr, 68061da546Spatrick size_t size, uint32_t flags); 69061da546Spatrick 70061da546Spatrick bool IsGPR(uint32_t reg_index) const; 71061da546Spatrick bool IsDR(uint32_t reg_index) const; 72061da546Spatrick }; 73061da546Spatrick 74061da546Spatrick } // namespace lldb_private 75061da546Spatrick 76061da546Spatrick #endif // liblldb_NativeRegisterContextWindows_WoW64_h_ 77061da546Spatrick #endif // defined(__x86_64__) || defined(_M_X64) 78