1 //===-- RegisterContextPOSIX_arm64.h ----------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef liblldb_RegisterContextPOSIX_arm64_H_
11 #define liblldb_RegisterContextPOSIX_arm64_H_
13 #include "lldb/Core/Log.h"
14 #include "RegisterContextPOSIX.h"
18 //---------------------------------------------------------------------------
19 // Internal codes for all ARM64 registers.
20 //---------------------------------------------------------------------------
24 gpr_x0_arm64 = k_first_gpr_arm64,
59 k_last_gpr_arm64 = gpr_cpsr_arm64,
62 fpu_v0_arm64 = k_first_fpr_arm64,
96 k_last_fpr_arm64 = fpu_fpcr_arm64,
167 k_num_registers_arm64,
168 k_num_gpr_registers_arm64 = k_last_gpr_arm64 - k_first_gpr_arm64 + 1,
169 k_num_fpr_registers_arm64 = k_last_fpr_arm64 - k_first_fpr_arm64 + 1
172 class RegisterContextPOSIX_arm64
173 : public lldb_private::RegisterContext
176 RegisterContextPOSIX_arm64 (lldb_private::Thread &thread,
177 uint32_t concrete_frame_idx,
178 lldb_private::RegisterInfoInterface *register_info);
180 ~RegisterContextPOSIX_arm64();
186 InvalidateAllRegisters();
195 GetRegisterSize(unsigned reg);
198 GetRegisterOffset(unsigned reg);
200 const lldb_private::RegisterInfo *
201 GetRegisterInfoAtIndex(size_t reg);
204 GetRegisterSetCount();
206 const lldb_private::RegisterSet *
207 GetRegisterSet(size_t set);
210 GetRegisterName(unsigned reg);
213 ConvertRegisterKindToRegisterNumber(lldb::RegisterKind kind, uint32_t num);
218 uint32_t num_registers;
219 uint32_t num_gpr_registers;
220 uint32_t num_fpr_registers;
226 uint32_t first_fpr_v;
232 // based on RegisterContextDarwin_arm64.h
238 // based on RegisterContextDarwin_arm64.h
246 uint64_t m_gpr_arm64[k_num_gpr_registers_arm64]; // 64-bit general purpose registers.
248 struct RegisterContextPOSIX_arm64::FPU m_fpr; // floating-point registers including extended register sets.
249 std::unique_ptr<lldb_private::RegisterInfoInterface> m_register_info_ap; // Register Info Interface (FreeBSD or Linux)
251 // Determines if an extended register set is supported on the processor running the inferior process.
253 IsRegisterSetAvailable(size_t set_index);
255 virtual const lldb_private::RegisterInfo *
264 lldb::ByteOrder GetByteOrder();
266 virtual bool ReadGPR() = 0;
267 virtual bool ReadFPR() = 0;
268 virtual bool WriteGPR() = 0;
269 virtual bool WriteFPR() = 0;
272 #endif // #ifndef liblldb_RegisterContextPOSIX_arm64_H_