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