1 //===-- RegisterContextPOSIX_s390x.h ----------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef liblldb_RegisterContextPOSIX_s390x_h_ 10 #define liblldb_RegisterContextPOSIX_s390x_h_ 11 12 #include "RegisterContext_s390x.h" 13 #include "RegisterInfoInterface.h" 14 #include "lldb-s390x-register-enums.h" 15 #include "lldb/Target/RegisterContext.h" 16 #include "lldb/Utility/Log.h" 17 18 class ProcessMonitor; 19 20 class RegisterContextPOSIX_s390x : public lldb_private::RegisterContext { 21 public: 22 RegisterContextPOSIX_s390x( 23 lldb_private::Thread &thread, uint32_t concrete_frame_idx, 24 lldb_private::RegisterInfoInterface *register_info); 25 26 ~RegisterContextPOSIX_s390x() override; 27 28 void Invalidate(); 29 30 void InvalidateAllRegisters() override; 31 32 size_t GetRegisterCount() override; 33 34 virtual unsigned GetRegisterSize(unsigned reg); 35 36 virtual unsigned GetRegisterOffset(unsigned reg); 37 38 const lldb_private::RegisterInfo *GetRegisterInfoAtIndex(size_t reg) override; 39 40 size_t GetRegisterSetCount() override; 41 42 const lldb_private::RegisterSet *GetRegisterSet(size_t set) override; 43 44 const char *GetRegisterName(unsigned reg); 45 46 uint32_t ConvertRegisterKindToRegisterNumber(lldb::RegisterKind kind, 47 uint32_t num) override; 48 49 protected: 50 struct RegInfo { 51 uint32_t num_registers; 52 uint32_t num_gpr_registers; 53 uint32_t num_fpr_registers; 54 55 uint32_t last_gpr; 56 uint32_t first_fpr; 57 uint32_t last_fpr; 58 }; 59 60 RegInfo m_reg_info; 61 std::unique_ptr<lldb_private::RegisterInfoInterface> m_register_info_up; 62 63 virtual bool IsRegisterSetAvailable(size_t set_index); 64 65 virtual const lldb_private::RegisterInfo *GetRegisterInfo(); 66 67 bool IsGPR(unsigned reg); 68 69 bool IsFPR(unsigned reg); 70 71 lldb::ByteOrder GetByteOrder(); 72 73 virtual bool ReadGPR() = 0; 74 virtual bool ReadFPR() = 0; 75 virtual bool WriteGPR() = 0; 76 virtual bool WriteFPR() = 0; 77 }; 78 79 #endif // liblldb_RegisterContextPOSIX_s390x_h_ 80