xref: /openbsd-src/gnu/llvm/lldb/source/Plugins/Process/FreeBSD/NativeRegisterContextFreeBSD_arm.h (revision f6aab3d83b51b91c24247ad2c2573574de475a82)
1be691f3bSpatrick //===-- NativeRegisterContextFreeBSD_arm.h ----------------------*- C++ -*-===//
2be691f3bSpatrick //
3be691f3bSpatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4be691f3bSpatrick // See https://llvm.org/LICENSE.txt for license information.
5be691f3bSpatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6be691f3bSpatrick //
7be691f3bSpatrick //===----------------------------------------------------------------------===//
8be691f3bSpatrick 
9be691f3bSpatrick #if defined(__arm__)
10be691f3bSpatrick 
11be691f3bSpatrick #ifndef lldb_NativeRegisterContextFreeBSD_arm_h
12be691f3bSpatrick #define lldb_NativeRegisterContextFreeBSD_arm_h
13be691f3bSpatrick 
14be691f3bSpatrick // clang-format off
15be691f3bSpatrick #include <sys/types.h>
16be691f3bSpatrick #include <machine/reg.h>
17be691f3bSpatrick #include <machine/vfp.h>
18be691f3bSpatrick // clang-format on
19be691f3bSpatrick 
20be691f3bSpatrick #include "Plugins/Process/FreeBSD/NativeRegisterContextFreeBSD.h"
21be691f3bSpatrick #include "Plugins/Process/Utility/RegisterInfoPOSIX_arm.h"
22be691f3bSpatrick 
23be691f3bSpatrick #include <array>
24be691f3bSpatrick 
25be691f3bSpatrick namespace lldb_private {
26be691f3bSpatrick namespace process_freebsd {
27be691f3bSpatrick 
28be691f3bSpatrick class NativeProcessFreeBSD;
29be691f3bSpatrick 
30be691f3bSpatrick class NativeRegisterContextFreeBSD_arm : public NativeRegisterContextFreeBSD {
31be691f3bSpatrick public:
32be691f3bSpatrick   NativeRegisterContextFreeBSD_arm(const ArchSpec &target_arch,
33be691f3bSpatrick                                    NativeThreadProtocol &native_thread);
34be691f3bSpatrick 
35be691f3bSpatrick   uint32_t GetRegisterSetCount() const override;
36be691f3bSpatrick 
37be691f3bSpatrick   uint32_t GetUserRegisterCount() const override;
38be691f3bSpatrick 
39be691f3bSpatrick   const RegisterSet *GetRegisterSet(uint32_t set_index) const override;
40be691f3bSpatrick 
41be691f3bSpatrick   Status ReadRegister(const RegisterInfo *reg_info,
42be691f3bSpatrick                       RegisterValue &reg_value) override;
43be691f3bSpatrick 
44be691f3bSpatrick   Status WriteRegister(const RegisterInfo *reg_info,
45be691f3bSpatrick                        const RegisterValue &reg_value) override;
46be691f3bSpatrick 
47*f6aab3d8Srobert   Status ReadAllRegisterValues(lldb::WritableDataBufferSP &data_sp) override;
48be691f3bSpatrick 
49be691f3bSpatrick   Status WriteAllRegisterValues(const lldb::DataBufferSP &data_sp) override;
50be691f3bSpatrick 
51be691f3bSpatrick   llvm::Error
52be691f3bSpatrick   CopyHardwareWatchpointsFrom(NativeRegisterContextFreeBSD &source) override;
53be691f3bSpatrick 
54be691f3bSpatrick private:
55be691f3bSpatrick   std::array<uint8_t, sizeof(reg) + sizeof(vfp_state)> m_reg_data;
56be691f3bSpatrick 
57be691f3bSpatrick   Status ReadRegisterSet(uint32_t set);
58be691f3bSpatrick   Status WriteRegisterSet(uint32_t set);
59be691f3bSpatrick 
60be691f3bSpatrick   RegisterInfoPOSIX_arm &GetRegisterInfo() const;
61be691f3bSpatrick };
62be691f3bSpatrick 
63be691f3bSpatrick } // namespace process_freebsd
64be691f3bSpatrick } // namespace lldb_private
65be691f3bSpatrick 
66be691f3bSpatrick #endif // #ifndef lldb_NativeRegisterContextFreeBSD_arm_h
67be691f3bSpatrick 
68be691f3bSpatrick #endif // defined (__arm__)
69