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 &reg_value) override;
41
42  Status WriteRegister(const RegisterInfo *reg_info,
43                       const RegisterValue &reg_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