1//===-- NativeRegisterContextOpenBSD_x86_64.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_x86_64_h 11#define lldb_NativeRegisterContextOpenBSD_x86_64_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/RegisterContext_x86.h" 20#include "Plugins/Process/Utility/lldb-x86-register-enums.h" 21 22namespace lldb_private { 23namespace process_openbsd { 24 25class NativeProcessOpenBSD; 26 27class NativeRegisterContextOpenBSD_x86_64 : public NativeRegisterContextOpenBSD { 28public: 29 NativeRegisterContextOpenBSD_x86_64(const ArchSpec &target_arch, 30 NativeThreadProtocol &native_thread); 31 size_t GetGPRSize() override { return sizeof(m_gpr); } 32 size_t GetFPRSize() override { return sizeof(m_fpr); } 33 34 uint32_t GetUserRegisterCount() const override; 35 uint32_t GetRegisterSetCount() const override; 36 37 const RegisterSet *GetRegisterSet(uint32_t set_index) const override; 38 39 Status ReadRegister(const RegisterInfo *reg_info, 40 RegisterValue ®_value) override; 41 42 Status WriteRegister(const RegisterInfo *reg_info, 43 const RegisterValue ®_value) override; 44 45 Status ReadAllRegisterValues(lldb::WritableDataBufferSP &data_sp) override; 46 47 Status WriteAllRegisterValues(const lldb::DataBufferSP &data_sp) override; 48 49protected: 50 void *GetGPRBuffer() override { return &m_gpr; } 51 void *GetFPRBuffer() override { return &m_fpr; } 52 53private: 54 // Private member types. 55 enum { GPRegSet, FPRegSet }; 56 57 // Private member variables. 58 struct reg m_gpr; 59 struct fpreg m_fpr; 60 61 int GetSetForNativeRegNum(int reg_num) const; 62 63 int ReadRegisterSet(uint32_t set); 64 int WriteRegisterSet(uint32_t set); 65}; 66 67} // namespace process_openbsd 68} // namespace lldb_private 69 70#endif // #ifndef lldb_NativeRegisterContextOpenBSD_x86_64_h 71