]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/source/Plugins/Process/Utility/RegisterContextLinux_mips64.cpp
Merge OpenBSM 1.2 alpha 4.
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / source / Plugins / Process / Utility / RegisterContextLinux_mips64.cpp
1 //===-- RegisterContextLinux_mips64.cpp ------------------------*- 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 #if defined (__mips__)
11
12 #include <vector>
13 #include <stddef.h>
14
15 // For GDB, GCC and DWARF Register numbers
16 #include "RegisterContextLinux_mips64.h"
17
18 // For GP and FP buffers
19 #include "RegisterContext_mips.h"
20
21 // Internal codes for all mips32 and mips64 registers
22 #include "lldb-mips-linux-register-enums.h"
23
24 using namespace lldb;
25 using namespace lldb_private;
26
27 //---------------------------------------------------------------------------
28 // Include RegisterInfos_mips64 to declare our g_register_infos_mips64 structure.
29 //---------------------------------------------------------------------------
30 #define DECLARE_REGISTER_INFOS_MIPS64_STRUCT
31 #define LINUX_MIPS64
32 #include "RegisterInfos_mips64.h"
33 #undef LINUX_MIPS64
34 #undef DECLARE_REGISTER_INFOS_MIPS64_STRUCT
35
36 //---------------------------------------------------------------------------
37 // Include RegisterInfos_mips to declare our g_register_infos_mips structure.
38 //---------------------------------------------------------------------------
39 #define DECLARE_REGISTER_INFOS_MIPS_STRUCT
40 #include "RegisterInfos_mips.h"
41 #undef DECLARE_REGISTER_INFOS_MIPS_STRUCT
42
43 static const RegisterInfo *
44 GetRegisterInfoPtr (const ArchSpec &target_arch)
45 {
46     switch (target_arch.GetMachine())
47     {
48         case llvm::Triple::mips64:
49         case llvm::Triple::mips64el:
50             return g_register_infos_mips64;
51         case llvm::Triple::mips:
52         case llvm::Triple::mipsel:
53             return g_register_infos_mips;
54         default:
55             assert(false && "Unhandled target architecture.");
56             return nullptr;
57     }
58 }
59
60 static uint32_t
61 GetRegisterInfoCount (const ArchSpec &target_arch)
62 {
63     switch (target_arch.GetMachine())
64     {
65         case llvm::Triple::mips64:
66         case llvm::Triple::mips64el:
67             return static_cast<uint32_t> (sizeof (g_register_infos_mips64) / sizeof (g_register_infos_mips64 [0]));
68         case llvm::Triple::mips:
69         case llvm::Triple::mipsel:
70             return static_cast<uint32_t> (sizeof (g_register_infos_mips) / sizeof (g_register_infos_mips [0]));
71         default:
72             assert(false && "Unhandled target architecture.");
73             return 0;
74     }
75 }
76
77 uint32_t
78 GetUserRegisterInfoCount (const ArchSpec &target_arch)
79 {
80     switch (target_arch.GetMachine())
81     {
82         case llvm::Triple::mips:
83         case llvm::Triple::mipsel:
84             return static_cast<uint32_t> (k_num_user_registers_mips);
85         case llvm::Triple::mips64el:
86         case llvm::Triple::mips64:
87             return static_cast<uint32_t> (k_num_user_registers_mips64);
88         default:
89             assert(false && "Unhandled target architecture.");
90             return 0;
91     }
92 }
93
94 RegisterContextLinux_mips64::RegisterContextLinux_mips64(const ArchSpec &target_arch) :
95     lldb_private::RegisterInfoInterface(target_arch),
96     m_register_info_p (GetRegisterInfoPtr (target_arch)),
97     m_register_info_count (GetRegisterInfoCount (target_arch)),
98     m_user_register_count (GetUserRegisterInfoCount (target_arch))
99 {
100 }
101
102 size_t
103 RegisterContextLinux_mips64::GetGPRSize() const
104 {
105     return sizeof(GPR_linux_mips);
106 }
107
108 const RegisterInfo *
109 RegisterContextLinux_mips64::GetRegisterInfo() const
110 {
111     return m_register_info_p;
112 }
113
114 uint32_t
115 RegisterContextLinux_mips64::GetRegisterCount () const
116 {
117     return m_register_info_count;
118 }
119
120 uint32_t
121 RegisterContextLinux_mips64::GetUserRegisterCount () const
122 {
123     return m_user_register_count;
124 }
125
126 #endif