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 ®_value) override; 44d409305fSDimitry Andric 45d409305fSDimitry Andric Status WriteRegister(const RegisterInfo *reg_info, 46d409305fSDimitry Andric const RegisterValue ®_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