1//===-- RegisterInfoPOSIX_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#ifndef liblldb_RegisterContextLinux_arm64_H_ 10#define liblldb_RegisterContextLinux_arm64_H_ 11 12#include "RegisterInfoInterface.h" 13#include "lldb/Target/RegisterContext.h" 14#include "lldb/lldb-private.h" 15 16class RegisterInfoPOSIX_arm64 : public lldb_private::RegisterInfoInterface { 17public: 18 // based on RegisterContextDarwin_arm64.h 19 struct GPR { 20 uint64_t x[29]; // x0-x28 21 uint64_t fp; // x29 22 uint64_t lr; // x30 23 uint64_t sp; // x31 24 uint64_t pc; // pc 25 uint32_t cpsr; // cpsr 26 }; 27 28 // based on RegisterContextDarwin_arm64.h 29 struct VReg { 30 uint8_t bytes[16]; 31 }; 32 33 // based on RegisterContextDarwin_arm64.h 34 struct FPU { 35 VReg v[32]; 36 uint32_t fpsr; 37 uint32_t fpcr; 38 }; 39 40 // based on RegisterContextDarwin_arm64.h 41 struct EXC { 42 uint64_t far; // Virtual Fault Address 43 uint32_t esr; // Exception syndrome 44 uint32_t exception; // number of arm exception token 45 }; 46 47 // based on RegisterContextDarwin_arm64.h 48 struct DBG { 49 uint64_t bvr[16]; 50 uint64_t bcr[16]; 51 uint64_t wvr[16]; 52 uint64_t wcr[16]; 53 uint64_t mdscr_el1; 54 }; 55 56 RegisterInfoPOSIX_arm64(const lldb_private::ArchSpec &target_arch); 57 58 size_t GetGPRSize() const override; 59 60 const lldb_private::RegisterInfo *GetRegisterInfo() const override; 61 62 uint32_t GetRegisterCount() const override; 63 64private: 65 const lldb_private::RegisterInfo *m_register_info_p; 66 uint32_t m_register_info_count; 67}; 68 69#endif 70