xref: /openbsd-src/gnu/llvm/lldb/source/Plugins/Process/FreeBSD/NativeRegisterContextFreeBSD_powerpc.h (revision f6aab3d83b51b91c24247ad2c2573574de475a82)
1be691f3bSpatrick //===-- NativeRegisterContextFreeBSD_powerpc.h ------------------*- C++ -*-===//
2be691f3bSpatrick //
3be691f3bSpatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4be691f3bSpatrick // See https://llvm.org/LICENSE.txt for license information.
5be691f3bSpatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6be691f3bSpatrick //
7be691f3bSpatrick //===----------------------------------------------------------------------===//
8be691f3bSpatrick 
9be691f3bSpatrick #if defined(__powerpc__)
10be691f3bSpatrick 
11be691f3bSpatrick #ifndef lldb_NativeRegisterContextFreeBSD_powerpc_h
12be691f3bSpatrick #define lldb_NativeRegisterContextFreeBSD_powerpc_h
13be691f3bSpatrick 
14be691f3bSpatrick // clang-format off
15be691f3bSpatrick #include <sys/types.h>
16be691f3bSpatrick #include <machine/reg.h>
17be691f3bSpatrick // clang-format on
18be691f3bSpatrick 
19be691f3bSpatrick #include "Plugins/Process/FreeBSD/NativeRegisterContextFreeBSD.h"
20be691f3bSpatrick #include "Plugins/Process/Utility/RegisterContextFreeBSD_powerpc.h"
21be691f3bSpatrick 
22be691f3bSpatrick #include <array>
23*f6aab3d8Srobert #include <optional>
24be691f3bSpatrick 
25be691f3bSpatrick namespace lldb_private {
26be691f3bSpatrick namespace process_freebsd {
27be691f3bSpatrick 
28be691f3bSpatrick class NativeProcessFreeBSD;
29be691f3bSpatrick 
30be691f3bSpatrick class NativeRegisterContextFreeBSD_powerpc
31be691f3bSpatrick     : public NativeRegisterContextFreeBSD {
32be691f3bSpatrick public:
33be691f3bSpatrick   NativeRegisterContextFreeBSD_powerpc(const ArchSpec &target_arch,
34be691f3bSpatrick                                        NativeThreadProtocol &native_thread);
35be691f3bSpatrick 
36be691f3bSpatrick   uint32_t GetRegisterSetCount() const override;
37be691f3bSpatrick 
38be691f3bSpatrick   uint32_t GetUserRegisterCount() const override;
39be691f3bSpatrick 
40be691f3bSpatrick   const RegisterSet *GetRegisterSet(uint32_t set_index) const override;
41be691f3bSpatrick 
42be691f3bSpatrick   Status ReadRegister(const RegisterInfo *reg_info,
43be691f3bSpatrick                       RegisterValue &reg_value) override;
44be691f3bSpatrick 
45be691f3bSpatrick   Status WriteRegister(const RegisterInfo *reg_info,
46be691f3bSpatrick                        const RegisterValue &reg_value) override;
47be691f3bSpatrick 
48*f6aab3d8Srobert   Status ReadAllRegisterValues(lldb::WritableDataBufferSP &data_sp) override;
49be691f3bSpatrick 
50be691f3bSpatrick   Status WriteAllRegisterValues(const lldb::DataBufferSP &data_sp) override;
51be691f3bSpatrick 
52be691f3bSpatrick   llvm::Error
53be691f3bSpatrick   CopyHardwareWatchpointsFrom(NativeRegisterContextFreeBSD &source) override;
54be691f3bSpatrick 
55be691f3bSpatrick private:
56be691f3bSpatrick   enum RegSetKind {
57be691f3bSpatrick     GPRegSet,
58be691f3bSpatrick     FPRegSet,
59be691f3bSpatrick   };
60be691f3bSpatrick   std::array<uint8_t, sizeof(reg) + sizeof(fpreg)> m_reg_data;
61be691f3bSpatrick 
62*f6aab3d8Srobert   std::optional<RegSetKind> GetSetForNativeRegNum(uint32_t reg_num) const;
63be691f3bSpatrick 
64be691f3bSpatrick   Status ReadRegisterSet(RegSetKind set);
65be691f3bSpatrick   Status WriteRegisterSet(RegSetKind set);
66be691f3bSpatrick 
67be691f3bSpatrick   RegisterContextFreeBSD_powerpc &GetRegisterInfo() const;
68be691f3bSpatrick };
69be691f3bSpatrick 
70be691f3bSpatrick } // namespace process_freebsd
71be691f3bSpatrick } // namespace lldb_private
72be691f3bSpatrick 
73be691f3bSpatrick #endif // #ifndef lldb_NativeRegisterContextFreeBSD_powerpc_h
74be691f3bSpatrick 
75be691f3bSpatrick #endif // defined (__powerpc__)
76