1061da546Spatrick //===-- RegisterContextPOSIX_ppc64le.h --------------------------*- C++ -*-===// 2061da546Spatrick // 3061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4061da546Spatrick // See https://llvm.org/LICENSE.txt for license information. 5061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6061da546Spatrick // 7061da546Spatrick //===----------------------------------------------------------------------===// 8061da546Spatrick 9*dda28197Spatrick #ifndef LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_REGISTERCONTEXTPOSIX_PPC64LE_H 10*dda28197Spatrick #define LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_REGISTERCONTEXTPOSIX_PPC64LE_H 11061da546Spatrick 12061da546Spatrick #include "Plugins/Process/Utility/lldb-ppc64le-register-enums.h" 13061da546Spatrick #include "RegisterInfoInterface.h" 14061da546Spatrick #include "Utility/PPC64LE_DWARF_Registers.h" 15061da546Spatrick #include "lldb/Target/RegisterContext.h" 16061da546Spatrick #include "lldb/Utility/Log.h" 17061da546Spatrick 18061da546Spatrick class RegisterContextPOSIX_ppc64le : public lldb_private::RegisterContext { 19061da546Spatrick public: 20061da546Spatrick RegisterContextPOSIX_ppc64le( 21061da546Spatrick lldb_private::Thread &thread, uint32_t concrete_frame_idx, 22061da546Spatrick lldb_private::RegisterInfoInterface *register_info); 23061da546Spatrick 24061da546Spatrick void InvalidateAllRegisters() override; 25061da546Spatrick 26061da546Spatrick size_t GetRegisterCount() override; 27061da546Spatrick 28061da546Spatrick virtual size_t GetGPRSize(); 29061da546Spatrick 30061da546Spatrick virtual unsigned GetRegisterSize(unsigned reg); 31061da546Spatrick 32061da546Spatrick virtual unsigned GetRegisterOffset(unsigned reg); 33061da546Spatrick 34061da546Spatrick const lldb_private::RegisterInfo *GetRegisterInfoAtIndex(size_t reg) override; 35061da546Spatrick 36061da546Spatrick size_t GetRegisterSetCount() override; 37061da546Spatrick 38061da546Spatrick const lldb_private::RegisterSet *GetRegisterSet(size_t set) override; 39061da546Spatrick 40061da546Spatrick const char *GetRegisterName(unsigned reg); 41061da546Spatrick 42061da546Spatrick protected: 43061da546Spatrick // 64-bit general purpose registers. 44061da546Spatrick uint64_t m_gpr_ppc64le[k_num_gpr_registers_ppc64le]; 45061da546Spatrick 46061da546Spatrick // floating-point registers including extended register. 47061da546Spatrick uint64_t m_fpr_ppc64le[k_num_fpr_registers_ppc64le]; 48061da546Spatrick 49061da546Spatrick // VMX registers. 50061da546Spatrick uint64_t m_vmx_ppc64le[k_num_vmx_registers_ppc64le * 2]; 51061da546Spatrick 52061da546Spatrick // VSX registers. 53061da546Spatrick uint64_t m_vsx_ppc64le[k_num_vsx_registers_ppc64le * 2]; 54061da546Spatrick 55061da546Spatrick std::unique_ptr<lldb_private::RegisterInfoInterface> m_register_info_up; 56061da546Spatrick 57061da546Spatrick // Determines if an extended register set is supported on the processor 58061da546Spatrick // running the inferior process. 59061da546Spatrick virtual bool IsRegisterSetAvailable(size_t set_index); 60061da546Spatrick 61061da546Spatrick virtual const lldb_private::RegisterInfo *GetRegisterInfo(); 62061da546Spatrick 63061da546Spatrick bool IsGPR(unsigned reg); 64061da546Spatrick 65061da546Spatrick bool IsFPR(unsigned reg); 66061da546Spatrick 67061da546Spatrick bool IsVMX(unsigned reg); 68061da546Spatrick 69061da546Spatrick bool IsVSX(unsigned reg); 70061da546Spatrick 71061da546Spatrick }; 72061da546Spatrick 73*dda28197Spatrick #endif // LLDB_SOURCE_PLUGINS_PROCESS_UTILITY_REGISTERCONTEXTPOSIX_PPC64LE_H 74