1061da546Spatrick //===-- NativeRegisterContextOpenBSD.h ---------------------------*- C++ -*-===//
2061da546Spatrick //
3061da546Spatrick //                     The LLVM Compiler Infrastructure
4061da546Spatrick //
5061da546Spatrick // This file is distributed under the University of Illinois Open Source
6061da546Spatrick // License. See LICENSE.TXT for details.
7061da546Spatrick //
8061da546Spatrick //===----------------------------------------------------------------------===//
9061da546Spatrick 
10061da546Spatrick #ifndef lldb_NativeRegisterContextOpenBSD_h
11061da546Spatrick #define lldb_NativeRegisterContextOpenBSD_h
12061da546Spatrick 
13061da546Spatrick #include "lldb/Host/common/NativeThreadProtocol.h"
14061da546Spatrick 
15061da546Spatrick #include "Plugins/Process/OpenBSD/NativeProcessOpenBSD.h"
16061da546Spatrick #include "Plugins/Process/Utility/NativeRegisterContextRegisterInfo.h"
17061da546Spatrick 
18061da546Spatrick namespace lldb_private {
19061da546Spatrick namespace process_openbsd {
20061da546Spatrick 
21061da546Spatrick class NativeRegisterContextOpenBSD : public NativeRegisterContextRegisterInfo {
22061da546Spatrick public:
23061da546Spatrick   NativeRegisterContextOpenBSD(NativeThreadProtocol &native_thread,
24061da546Spatrick                               RegisterInfoInterface *reg_info_interface_p);
25061da546Spatrick 
26061da546Spatrick   // This function is implemented in the NativeRegisterContextOpenBSD_*
27061da546Spatrick   // subclasses to create a new instance of the host specific
28061da546Spatrick   // NativeRegisterContextOpenBSD. The implementations can't collide as only one
29061da546Spatrick   // NativeRegisterContextOpenBSD_* variant should be compiled into the final
30061da546Spatrick   // executable.
31*0f45e296Smortimer   static std::unique_ptr<NativeRegisterContextOpenBSD>
32061da546Spatrick   CreateHostNativeRegisterContextOpenBSD(const ArchSpec &target_arch,
33061da546Spatrick                                         NativeThreadProtocol &native_thread);
34061da546Spatrick 
35061da546Spatrick protected:
36061da546Spatrick   virtual Status ReadGPR();
37061da546Spatrick   virtual Status WriteGPR();
38061da546Spatrick 
39061da546Spatrick   virtual Status ReadFPR();
40061da546Spatrick   virtual Status WriteFPR();
41061da546Spatrick 
GetGPRBuffer()42061da546Spatrick   virtual void *GetGPRBuffer() { return nullptr; }
GetGPRSize()43061da546Spatrick   virtual size_t GetGPRSize() {
44061da546Spatrick     return GetRegisterInfoInterface().GetGPRSize();
45061da546Spatrick   }
46061da546Spatrick 
GetFPRBuffer()47061da546Spatrick   virtual void *GetFPRBuffer() { return nullptr; }
GetFPRSize()48061da546Spatrick   virtual size_t GetFPRSize() { return 0; }
49061da546Spatrick 
50061da546Spatrick   virtual Status DoReadGPR(void *buf);
51061da546Spatrick   virtual Status DoWriteGPR(void *buf);
52061da546Spatrick 
53061da546Spatrick   virtual Status DoReadFPR(void *buf);
54061da546Spatrick   virtual Status DoWriteFPR(void *buf);
55061da546Spatrick 
56061da546Spatrick   virtual NativeProcessOpenBSD &GetProcess();
57061da546Spatrick   virtual ::pid_t GetProcessPid();
58061da546Spatrick };
59061da546Spatrick 
60061da546Spatrick } // namespace process_openbsd
61061da546Spatrick } // namespace lldb_private
62061da546Spatrick 
63061da546Spatrick #endif // #ifndef lldb_NativeRegisterContextOpenBSD_h
64