1 //===-- NativeRegisterContextOpenBSD_arm64.h --------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef lldb_NativeRegisterContextOpenBSD_arm64_h 11 #define lldb_NativeRegisterContextOpenBSD_arm64_h 12 13 // clang-format off 14 #include <sys/types.h> 15 #include <machine/reg.h> 16 // clang-format on 17 18 #include "Plugins/Process/OpenBSD/NativeRegisterContextOpenBSD.h" 19 #include "Plugins/Process/Utility/RegisterInfoPOSIX_arm64.h" 20 #include "Plugins/Process/Utility/lldb-arm64-register-enums.h" 21 22 namespace lldb_private { 23 namespace process_openbsd { 24 25 class NativeProcessOpenBSD; 26 27 class NativeRegisterContextOpenBSD_arm64 : public NativeRegisterContextOpenBSD { 28 public: 29 NativeRegisterContextOpenBSD_arm64(const ArchSpec &target_arch, 30 NativeThreadProtocol &native_thread); 31 32 // NativeRegisterContextOpenBSD_arm64 subclasses NativeRegisterContextOpenBSD, 33 // which is a subclass of NativeRegisterContextRegisterInfo, which is a 34 // subclass of NativeRegisterContext. 35 // 36 // NativeRegisterContextOpenBSD defines an interface for reading and writing 37 // registers using the system ptrace API. Subclasses of NativeRegisterContextOpenBSD 38 // do not need to implement any of the interface defined by NativeRegisterContextOpenBSD, 39 // since it is not machine dependent, but they do have to implement a bunch 40 // of stuff from the NativeRegisterContext. Some of this is handled by a 41 // generic implementation in NativeRegisterContextRegisterInfo, but most of 42 // but most of it has to be implemented here. 43 GetGPRSize()44 size_t GetGPRSize() override { return sizeof(m_gpr); } GetFPRSize()45 size_t GetFPRSize() override { return sizeof(m_fpr); } 46 47 uint32_t GetUserRegisterCount() const override; 48 49 uint32_t GetRegisterSetCount() const override; 50 51 const RegisterSet *GetRegisterSet(uint32_t set_index) const override; 52 53 Status ReadRegister(const RegisterInfo *reg_info, 54 RegisterValue ®_value) override; 55 56 Status WriteRegister(const RegisterInfo *reg_info, 57 const RegisterValue ®_value) override; 58 59 Status ReadAllRegisterValues(lldb::WritableDataBufferSP &data_sp) override; 60 61 Status WriteAllRegisterValues(const lldb::DataBufferSP &data_sp) override; 62 63 protected: GetGPRBuffer()64 void *GetGPRBuffer() override { return &m_gpr; } GetFPRBuffer()65 void *GetFPRBuffer() override { return &m_fpr; } 66 67 private: 68 // Private member types. 69 enum { GPRegSet, FPRegSet, PACMaskRegSet }; 70 71 // Private member variables. 72 struct reg m_gpr; 73 struct fpreg m_fpr; 74 register_t m_pacmask[2]; 75 76 int GetSetForNativeRegNum(int reg_num) const; 77 78 int ReadRegisterSet(uint32_t set); 79 int WriteRegisterSet(uint32_t set); 80 81 RegisterInfoPOSIX_arm64 &GetRegisterInfo() const; 82 83 Status ReadPACMask(); 84 }; 85 86 } // namespace process_openbsd 87 } // namespace lldb_private 88 89 #endif // #ifndef lldb_NativeRegisterContextOpenBSD_arm64_h 90