]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/source/Plugins/Process/Utility/RegisterInfoPOSIX_arm.h
MFV: r344447
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / source / Plugins / Process / Utility / RegisterInfoPOSIX_arm.h
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_