xref: /llvm-project/lldb/source/Plugins/Process/Windows/Common/NativeRegisterContextWindows_arm.h (revision c2f6460145175d265cd1a7ad7906b778bb11fa3d)
1a59444a3SMartin Storsjo //===-- NativeRegisterContextWindows_arm.h ----------------------*- C++ -*-===//
2a59444a3SMartin Storsjo //
3a59444a3SMartin Storsjo // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4a59444a3SMartin Storsjo // See https://llvm.org/LICENSE.txt for license information.
5a59444a3SMartin Storsjo // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6a59444a3SMartin Storsjo //
7a59444a3SMartin Storsjo //===----------------------------------------------------------------------===//
8a59444a3SMartin Storsjo 
9a59444a3SMartin Storsjo #if defined(__arm__) || defined(_M_ARM)
10a59444a3SMartin Storsjo #ifndef liblldb_NativeRegisterContextWindows_arm_h_
11a59444a3SMartin Storsjo #define liblldb_NativeRegisterContextWindows_arm_h_
12a59444a3SMartin Storsjo 
13a59444a3SMartin Storsjo #include "Plugins/Process/Utility/lldb-arm-register-enums.h"
14a59444a3SMartin Storsjo 
15a59444a3SMartin Storsjo #include "NativeRegisterContextWindows.h"
16a59444a3SMartin Storsjo 
17a59444a3SMartin Storsjo namespace lldb_private {
18a59444a3SMartin Storsjo 
19a59444a3SMartin Storsjo class NativeThreadWindows;
20a59444a3SMartin Storsjo 
21a59444a3SMartin Storsjo class NativeRegisterContextWindows_arm : public NativeRegisterContextWindows {
22a59444a3SMartin Storsjo public:
23a59444a3SMartin Storsjo   NativeRegisterContextWindows_arm(const ArchSpec &target_arch,
24a59444a3SMartin Storsjo                                    NativeThreadProtocol &native_thread);
25a59444a3SMartin Storsjo 
26a59444a3SMartin Storsjo   uint32_t GetRegisterSetCount() const override;
27a59444a3SMartin Storsjo 
28a59444a3SMartin Storsjo   const RegisterSet *GetRegisterSet(uint32_t set_index) const override;
29a59444a3SMartin Storsjo 
30a59444a3SMartin Storsjo   Status ReadRegister(const RegisterInfo *reg_info,
31a59444a3SMartin Storsjo                       RegisterValue &reg_value) override;
32a59444a3SMartin Storsjo 
33a59444a3SMartin Storsjo   Status WriteRegister(const RegisterInfo *reg_info,
34a59444a3SMartin Storsjo                        const RegisterValue &reg_value) override;
35a59444a3SMartin Storsjo 
36*c2f64601SJonas Devlieghere   Status ReadAllRegisterValues(lldb::WritableDataBufferSP &data_sp) override;
37a59444a3SMartin Storsjo 
38a59444a3SMartin Storsjo   Status WriteAllRegisterValues(const lldb::DataBufferSP &data_sp) override;
39a59444a3SMartin Storsjo 
40a59444a3SMartin Storsjo   Status IsWatchpointHit(uint32_t wp_index, bool &is_hit) override;
41a59444a3SMartin Storsjo 
42a59444a3SMartin Storsjo   Status GetWatchpointHitIndex(uint32_t &wp_index,
43a59444a3SMartin Storsjo                                lldb::addr_t trap_addr) override;
44a59444a3SMartin Storsjo 
45a59444a3SMartin Storsjo   Status IsWatchpointVacant(uint32_t wp_index, bool &is_vacant) override;
46a59444a3SMartin Storsjo 
47a59444a3SMartin Storsjo   bool ClearHardwareWatchpoint(uint32_t wp_index) override;
48a59444a3SMartin Storsjo 
49a59444a3SMartin Storsjo   Status ClearAllHardwareWatchpoints() override;
50a59444a3SMartin Storsjo 
51a59444a3SMartin Storsjo   Status SetHardwareWatchpointWithIndex(lldb::addr_t addr, size_t size,
52a59444a3SMartin Storsjo                                         uint32_t watch_flags,
53a59444a3SMartin Storsjo                                         uint32_t wp_index);
54a59444a3SMartin Storsjo 
55a59444a3SMartin Storsjo   uint32_t SetHardwareWatchpoint(lldb::addr_t addr, size_t size,
56a59444a3SMartin Storsjo                                  uint32_t watch_flags) override;
57a59444a3SMartin Storsjo 
58a59444a3SMartin Storsjo   lldb::addr_t GetWatchpointAddress(uint32_t wp_index) override;
59a59444a3SMartin Storsjo 
60a59444a3SMartin Storsjo   uint32_t NumSupportedHardwareWatchpoints() override;
61a59444a3SMartin Storsjo 
62a59444a3SMartin Storsjo protected:
63a59444a3SMartin Storsjo   Status GPRRead(const uint32_t reg, RegisterValue &reg_value);
64a59444a3SMartin Storsjo 
65a59444a3SMartin Storsjo   Status GPRWrite(const uint32_t reg, const RegisterValue &reg_value);
66a59444a3SMartin Storsjo 
67a59444a3SMartin Storsjo   Status FPRRead(const uint32_t reg, RegisterValue &reg_value);
68a59444a3SMartin Storsjo 
69a59444a3SMartin Storsjo   Status FPRWrite(const uint32_t reg, const RegisterValue &reg_value);
70a59444a3SMartin Storsjo 
71a59444a3SMartin Storsjo private:
72a59444a3SMartin Storsjo   bool IsGPR(uint32_t reg_index) const;
73a59444a3SMartin Storsjo 
74a59444a3SMartin Storsjo   bool IsFPR(uint32_t reg_index) const;
75a59444a3SMartin Storsjo };
76a59444a3SMartin Storsjo 
77a59444a3SMartin Storsjo } // namespace lldb_private
78a59444a3SMartin Storsjo 
79a59444a3SMartin Storsjo #endif // liblldb_NativeRegisterContextWindows_arm_h_
80a59444a3SMartin Storsjo #endif // defined(__arm__) || defined(_M_ARM)
81