1 //===-- NativeRegisterContextFreeBSD_arm64.h --------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #if defined(__aarch64__) 10 11 #ifndef lldb_NativeRegisterContextFreeBSD_arm64_h 12 #define lldb_NativeRegisterContextFreeBSD_arm64_h 13 14 // clang-format off 15 #include <sys/types.h> 16 #include <machine/reg.h> 17 // clang-format on 18 19 #include "Plugins/Process/FreeBSD/NativeRegisterContextFreeBSD.h" 20 #include "Plugins/Process/Utility/RegisterInfoPOSIX_arm64.h" 21 22 #include <array> 23 24 namespace lldb_private { 25 namespace process_freebsd { 26 27 class NativeProcessFreeBSD; 28 29 class NativeRegisterContextFreeBSD_arm64 : public NativeRegisterContextFreeBSD { 30 public: 31 NativeRegisterContextFreeBSD_arm64(const ArchSpec &target_arch, 32 NativeThreadProtocol &native_thread); 33 34 uint32_t GetRegisterSetCount() const override; 35 36 uint32_t GetUserRegisterCount() const override; 37 38 const RegisterSet *GetRegisterSet(uint32_t set_index) const override; 39 40 Status ReadRegister(const RegisterInfo *reg_info, 41 RegisterValue ®_value) override; 42 43 Status WriteRegister(const RegisterInfo *reg_info, 44 const RegisterValue ®_value) override; 45 46 Status ReadAllRegisterValues(lldb::DataBufferSP &data_sp) override; 47 48 Status WriteAllRegisterValues(const lldb::DataBufferSP &data_sp) override; 49 50 llvm::Error 51 CopyHardwareWatchpointsFrom(NativeRegisterContextFreeBSD &source) override; 52 53 private: 54 // Due to alignment, FreeBSD reg/fpreg are a few bytes larger than 55 // LLDB's GPR/FPU structs. However, all fields have matching offsets 56 // and sizes, so we do not have to worry about these (and we have 57 // a unittest to assert that). 58 std::array<uint8_t, sizeof(reg) + sizeof(fpreg)> m_reg_data; 59 60 Status ReadRegisterSet(uint32_t set); 61 Status WriteRegisterSet(uint32_t set); 62 63 RegisterInfoPOSIX_arm64 &GetRegisterInfo() const; 64 }; 65 66 } // namespace process_freebsd 67 } // namespace lldb_private 68 69 #endif // #ifndef lldb_NativeRegisterContextFreeBSD_arm64_h 70 71 #endif // defined (__aarch64__) 72