xref: /openbsd-src/gnu/llvm/lldb/source/Plugins/Process/Windows/Common/NativeRegisterContextWindows_arm.h (revision f6aab3d83b51b91c24247ad2c2573574de475a82)
1061da546Spatrick //===-- NativeRegisterContextWindows_arm.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(__arm__) || defined(_M_ARM)
10061da546Spatrick #ifndef liblldb_NativeRegisterContextWindows_arm_h_
11061da546Spatrick #define liblldb_NativeRegisterContextWindows_arm_h_
12061da546Spatrick 
13061da546Spatrick #include "Plugins/Process/Utility/lldb-arm-register-enums.h"
14061da546Spatrick 
15061da546Spatrick #include "NativeRegisterContextWindows.h"
16061da546Spatrick 
17061da546Spatrick namespace lldb_private {
18061da546Spatrick 
19061da546Spatrick class NativeThreadWindows;
20061da546Spatrick 
21061da546Spatrick class NativeRegisterContextWindows_arm : public NativeRegisterContextWindows {
22061da546Spatrick public:
23061da546Spatrick   NativeRegisterContextWindows_arm(const ArchSpec &target_arch,
24061da546Spatrick                                    NativeThreadProtocol &native_thread);
25061da546Spatrick 
26061da546Spatrick   uint32_t GetRegisterSetCount() const override;
27061da546Spatrick 
28061da546Spatrick   const RegisterSet *GetRegisterSet(uint32_t set_index) const override;
29061da546Spatrick 
30061da546Spatrick   Status ReadRegister(const RegisterInfo *reg_info,
31061da546Spatrick                       RegisterValue &reg_value) override;
32061da546Spatrick 
33061da546Spatrick   Status WriteRegister(const RegisterInfo *reg_info,
34061da546Spatrick                        const RegisterValue &reg_value) override;
35061da546Spatrick 
36*f6aab3d8Srobert   Status ReadAllRegisterValues(lldb::WritableDataBufferSP &data_sp) override;
37061da546Spatrick 
38061da546Spatrick   Status WriteAllRegisterValues(const lldb::DataBufferSP &data_sp) override;
39061da546Spatrick 
40061da546Spatrick   Status IsWatchpointHit(uint32_t wp_index, bool &is_hit) override;
41061da546Spatrick 
42061da546Spatrick   Status GetWatchpointHitIndex(uint32_t &wp_index,
43061da546Spatrick                                lldb::addr_t trap_addr) override;
44061da546Spatrick 
45061da546Spatrick   Status IsWatchpointVacant(uint32_t wp_index, bool &is_vacant) override;
46061da546Spatrick 
47061da546Spatrick   bool ClearHardwareWatchpoint(uint32_t wp_index) override;
48061da546Spatrick 
49061da546Spatrick   Status ClearAllHardwareWatchpoints() override;
50061da546Spatrick 
51061da546Spatrick   Status SetHardwareWatchpointWithIndex(lldb::addr_t addr, size_t size,
52061da546Spatrick                                         uint32_t watch_flags,
53061da546Spatrick                                         uint32_t wp_index);
54061da546Spatrick 
55061da546Spatrick   uint32_t SetHardwareWatchpoint(lldb::addr_t addr, size_t size,
56061da546Spatrick                                  uint32_t watch_flags) override;
57061da546Spatrick 
58061da546Spatrick   lldb::addr_t GetWatchpointAddress(uint32_t wp_index) override;
59061da546Spatrick 
60061da546Spatrick   uint32_t NumSupportedHardwareWatchpoints() override;
61061da546Spatrick 
62061da546Spatrick protected:
63061da546Spatrick   Status GPRRead(const uint32_t reg, RegisterValue &reg_value);
64061da546Spatrick 
65061da546Spatrick   Status GPRWrite(const uint32_t reg, const RegisterValue &reg_value);
66061da546Spatrick 
67061da546Spatrick   Status FPRRead(const uint32_t reg, RegisterValue &reg_value);
68061da546Spatrick 
69061da546Spatrick   Status FPRWrite(const uint32_t reg, const RegisterValue &reg_value);
70061da546Spatrick 
71061da546Spatrick private:
72061da546Spatrick   bool IsGPR(uint32_t reg_index) const;
73061da546Spatrick 
74061da546Spatrick   bool IsFPR(uint32_t reg_index) const;
75061da546Spatrick };
76061da546Spatrick 
77061da546Spatrick } // namespace lldb_private
78061da546Spatrick 
79061da546Spatrick #endif // liblldb_NativeRegisterContextWindows_arm_h_
80061da546Spatrick #endif // defined(__arm__) || defined(_M_ARM)
81