1be691f3bSpatrick //===-- NativeRegisterContextFreeBSD_powerpc.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(__powerpc__) 10be691f3bSpatrick 11be691f3bSpatrick #ifndef lldb_NativeRegisterContextFreeBSD_powerpc_h 12be691f3bSpatrick #define lldb_NativeRegisterContextFreeBSD_powerpc_h 13be691f3bSpatrick 14be691f3bSpatrick // clang-format off 15be691f3bSpatrick #include <sys/types.h> 16be691f3bSpatrick #include <machine/reg.h> 17be691f3bSpatrick // clang-format on 18be691f3bSpatrick 19be691f3bSpatrick #include "Plugins/Process/FreeBSD/NativeRegisterContextFreeBSD.h" 20be691f3bSpatrick #include "Plugins/Process/Utility/RegisterContextFreeBSD_powerpc.h" 21be691f3bSpatrick 22be691f3bSpatrick #include <array> 23*f6aab3d8Srobert #include <optional> 24be691f3bSpatrick 25be691f3bSpatrick namespace lldb_private { 26be691f3bSpatrick namespace process_freebsd { 27be691f3bSpatrick 28be691f3bSpatrick class NativeProcessFreeBSD; 29be691f3bSpatrick 30be691f3bSpatrick class NativeRegisterContextFreeBSD_powerpc 31be691f3bSpatrick : public NativeRegisterContextFreeBSD { 32be691f3bSpatrick public: 33be691f3bSpatrick NativeRegisterContextFreeBSD_powerpc(const ArchSpec &target_arch, 34be691f3bSpatrick NativeThreadProtocol &native_thread); 35be691f3bSpatrick 36be691f3bSpatrick uint32_t GetRegisterSetCount() const override; 37be691f3bSpatrick 38be691f3bSpatrick uint32_t GetUserRegisterCount() const override; 39be691f3bSpatrick 40be691f3bSpatrick const RegisterSet *GetRegisterSet(uint32_t set_index) const override; 41be691f3bSpatrick 42be691f3bSpatrick Status ReadRegister(const RegisterInfo *reg_info, 43be691f3bSpatrick RegisterValue ®_value) override; 44be691f3bSpatrick 45be691f3bSpatrick Status WriteRegister(const RegisterInfo *reg_info, 46be691f3bSpatrick const RegisterValue ®_value) override; 47be691f3bSpatrick 48*f6aab3d8Srobert Status ReadAllRegisterValues(lldb::WritableDataBufferSP &data_sp) override; 49be691f3bSpatrick 50be691f3bSpatrick Status WriteAllRegisterValues(const lldb::DataBufferSP &data_sp) override; 51be691f3bSpatrick 52be691f3bSpatrick llvm::Error 53be691f3bSpatrick CopyHardwareWatchpointsFrom(NativeRegisterContextFreeBSD &source) override; 54be691f3bSpatrick 55be691f3bSpatrick private: 56be691f3bSpatrick enum RegSetKind { 57be691f3bSpatrick GPRegSet, 58be691f3bSpatrick FPRegSet, 59be691f3bSpatrick }; 60be691f3bSpatrick std::array<uint8_t, sizeof(reg) + sizeof(fpreg)> m_reg_data; 61be691f3bSpatrick 62*f6aab3d8Srobert std::optional<RegSetKind> GetSetForNativeRegNum(uint32_t reg_num) const; 63be691f3bSpatrick 64be691f3bSpatrick Status ReadRegisterSet(RegSetKind set); 65be691f3bSpatrick Status WriteRegisterSet(RegSetKind set); 66be691f3bSpatrick 67be691f3bSpatrick RegisterContextFreeBSD_powerpc &GetRegisterInfo() const; 68be691f3bSpatrick }; 69be691f3bSpatrick 70be691f3bSpatrick } // namespace process_freebsd 71be691f3bSpatrick } // namespace lldb_private 72be691f3bSpatrick 73be691f3bSpatrick #endif // #ifndef lldb_NativeRegisterContextFreeBSD_powerpc_h 74be691f3bSpatrick 75be691f3bSpatrick #endif // defined (__powerpc__) 76