1 //===-- RegisterInfoPOSIX_arm.h ---------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef liblldb_RegisterInfoPOSIX_arm_h_ 11 #define liblldb_RegisterInfoPOSIX_arm_h_ 12 13 #include "RegisterInfoInterface.h" 14 #include "lldb/Target/RegisterContext.h" 15 #include "lldb/lldb-private.h" 16 17 class RegisterInfoPOSIX_arm : public lldb_private::RegisterInfoInterface { 18 public: 19 struct GPR { 20 uint32_t r[16]; // R0-R15 21 uint32_t cpsr; // CPSR 22 }; 23 24 struct QReg { 25 uint8_t bytes[16]; 26 }; 27 28 struct FPU { 29 union { 30 uint32_t s[32]; 31 uint64_t d[32]; 32 QReg q[16]; // the 128-bit NEON registers 33 } floats; 34 uint32_t fpscr; 35 }; 36 struct EXC { 37 uint32_t exception; 38 uint32_t fsr; /* Fault status */ 39 uint32_t far; /* Virtual Fault Address */ 40 }; 41 42 struct DBG { 43 uint32_t bvr[16]; 44 uint32_t bcr[16]; 45 uint32_t wvr[16]; 46 uint32_t wcr[16]; 47 }; 48 49 RegisterInfoPOSIX_arm(const lldb_private::ArchSpec &target_arch); 50 51 size_t GetGPRSize() const override; 52 53 const lldb_private::RegisterInfo *GetRegisterInfo() const override; 54 55 uint32_t GetRegisterCount() const override; 56 57 private: 58 const lldb_private::RegisterInfo *m_register_info_p; 59 uint32_t m_register_info_count; 60 }; 61 62 #endif // liblldb_RegisterInfoPOSIX_arm_h_ 63