1d409305fSDimitry Andric //===-- NativeRegisterContextFreeBSD_mips64.h -------------------*- C++ -*-===//
2d409305fSDimitry Andric //
3d409305fSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4d409305fSDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
5d409305fSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6d409305fSDimitry Andric //
7d409305fSDimitry Andric //===----------------------------------------------------------------------===//
8d409305fSDimitry Andric 
9d409305fSDimitry Andric #if defined(__mips64__)
10d409305fSDimitry Andric 
11d409305fSDimitry Andric #ifndef lldb_NativeRegisterContextFreeBSD_mips64_h
12d409305fSDimitry Andric #define lldb_NativeRegisterContextFreeBSD_mips64_h
13d409305fSDimitry Andric 
14d409305fSDimitry Andric // clang-format off
15d409305fSDimitry Andric #include <sys/types.h>
16d409305fSDimitry Andric #include <machine/reg.h>
17d409305fSDimitry Andric // clang-format on
18d409305fSDimitry Andric 
19d409305fSDimitry Andric #include "Plugins/Process/FreeBSD/NativeRegisterContextFreeBSD.h"
20d409305fSDimitry Andric #include "Plugins/Process/Utility/RegisterContextFreeBSD_mips64.h"
21d409305fSDimitry Andric 
22d409305fSDimitry Andric #include <array>
23*bdd1243dSDimitry Andric #include <optional>
24d409305fSDimitry Andric 
25d409305fSDimitry Andric namespace lldb_private {
26d409305fSDimitry Andric namespace process_freebsd {
27d409305fSDimitry Andric 
28d409305fSDimitry Andric class NativeProcessFreeBSD;
29d409305fSDimitry Andric 
30d409305fSDimitry Andric class NativeRegisterContextFreeBSD_mips64
31d409305fSDimitry Andric     : public NativeRegisterContextFreeBSD {
32d409305fSDimitry Andric public:
33d409305fSDimitry Andric   NativeRegisterContextFreeBSD_mips64(const ArchSpec &target_arch,
34d409305fSDimitry Andric                                       NativeThreadProtocol &native_thread);
35d409305fSDimitry Andric 
36d409305fSDimitry Andric   uint32_t GetRegisterSetCount() const override;
37d409305fSDimitry Andric 
38d409305fSDimitry Andric   uint32_t GetUserRegisterCount() const override;
39d409305fSDimitry Andric 
40d409305fSDimitry Andric   const RegisterSet *GetRegisterSet(uint32_t set_index) const override;
41d409305fSDimitry Andric 
42d409305fSDimitry Andric   Status ReadRegister(const RegisterInfo *reg_info,
43d409305fSDimitry Andric                       RegisterValue &reg_value) override;
44d409305fSDimitry Andric 
45d409305fSDimitry Andric   Status WriteRegister(const RegisterInfo *reg_info,
46d409305fSDimitry Andric                        const RegisterValue &reg_value) override;
47d409305fSDimitry Andric 
4881ad6265SDimitry Andric   Status ReadAllRegisterValues(lldb::WritableDataBufferSP &data_sp) override;
49d409305fSDimitry Andric 
50d409305fSDimitry Andric   Status WriteAllRegisterValues(const lldb::DataBufferSP &data_sp) override;
51d409305fSDimitry Andric 
52d409305fSDimitry Andric   llvm::Error
53d409305fSDimitry Andric   CopyHardwareWatchpointsFrom(NativeRegisterContextFreeBSD &source) override;
54d409305fSDimitry Andric 
55d409305fSDimitry Andric private:
56d409305fSDimitry Andric   enum RegSetKind {
57d409305fSDimitry Andric     GPRegSet,
58349cc55cSDimitry Andric     FPRegSet,
59d409305fSDimitry Andric   };
60349cc55cSDimitry Andric   std::array<uint8_t, sizeof(reg) + sizeof(fpreg)> m_reg_data;
61349cc55cSDimitry Andric 
62*bdd1243dSDimitry Andric   std::optional<RegSetKind> GetSetForNativeRegNum(uint32_t reg_num) const;
63d409305fSDimitry Andric 
64d409305fSDimitry Andric   Status ReadRegisterSet(RegSetKind set);
65d409305fSDimitry Andric   Status WriteRegisterSet(RegSetKind set);
66d409305fSDimitry Andric 
67d409305fSDimitry Andric   RegisterContextFreeBSD_mips64 &GetRegisterInfo() const;
68d409305fSDimitry Andric };
69d409305fSDimitry Andric 
70d409305fSDimitry Andric } // namespace process_freebsd
71d409305fSDimitry Andric } // namespace lldb_private
72d409305fSDimitry Andric 
73d409305fSDimitry Andric #endif // #ifndef lldb_NativeRegisterContextFreeBSD_mips64_h
74d409305fSDimitry Andric 
75d409305fSDimitry Andric #endif // defined (__mips64__)
76