]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/source/Plugins/Process/Utility/RegisterContextFreeBSD_powerpc.cpp
MFV r348548: 9617 too-frequent TXG sync causes excessive write inflation
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / source / Plugins / Process / Utility / RegisterContextFreeBSD_powerpc.cpp
1 //===-- RegisterContextFreeBSD_powerpc.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 #include "RegisterContextFreeBSD_powerpc.h"
11 #include "RegisterContextPOSIX_powerpc.h"
12 #include <vector>
13
14 using namespace lldb_private;
15 using namespace lldb;
16
17 // http://svnweb.freebsd.org/base/head/sys/powerpc/include/reg.h
18 typedef struct _GPR64 {
19   uint64_t r0;
20   uint64_t r1;
21   uint64_t r2;
22   uint64_t r3;
23   uint64_t r4;
24   uint64_t r5;
25   uint64_t r6;
26   uint64_t r7;
27   uint64_t r8;
28   uint64_t r9;
29   uint64_t r10;
30   uint64_t r11;
31   uint64_t r12;
32   uint64_t r13;
33   uint64_t r14;
34   uint64_t r15;
35   uint64_t r16;
36   uint64_t r17;
37   uint64_t r18;
38   uint64_t r19;
39   uint64_t r20;
40   uint64_t r21;
41   uint64_t r22;
42   uint64_t r23;
43   uint64_t r24;
44   uint64_t r25;
45   uint64_t r26;
46   uint64_t r27;
47   uint64_t r28;
48   uint64_t r29;
49   uint64_t r30;
50   uint64_t r31;
51   uint64_t lr;
52   uint64_t cr;
53   uint64_t xer;
54   uint64_t ctr;
55   uint64_t pc;
56 } GPR64;
57
58 typedef struct _GPR32 {
59   uint32_t r0;
60   uint32_t r1;
61   uint32_t r2;
62   uint32_t r3;
63   uint32_t r4;
64   uint32_t r5;
65   uint32_t r6;
66   uint32_t r7;
67   uint32_t r8;
68   uint32_t r9;
69   uint32_t r10;
70   uint32_t r11;
71   uint32_t r12;
72   uint32_t r13;
73   uint32_t r14;
74   uint32_t r15;
75   uint32_t r16;
76   uint32_t r17;
77   uint32_t r18;
78   uint32_t r19;
79   uint32_t r20;
80   uint32_t r21;
81   uint32_t r22;
82   uint32_t r23;
83   uint32_t r24;
84   uint32_t r25;
85   uint32_t r26;
86   uint32_t r27;
87   uint32_t r28;
88   uint32_t r29;
89   uint32_t r30;
90   uint32_t r31;
91   uint32_t lr;
92   uint32_t cr;
93   uint32_t xer;
94   uint32_t ctr;
95   uint32_t pc;
96 } GPR32;
97
98 typedef struct _FPR {
99   uint64_t f0;
100   uint64_t f1;
101   uint64_t f2;
102   uint64_t f3;
103   uint64_t f4;
104   uint64_t f5;
105   uint64_t f6;
106   uint64_t f7;
107   uint64_t f8;
108   uint64_t f9;
109   uint64_t f10;
110   uint64_t f11;
111   uint64_t f12;
112   uint64_t f13;
113   uint64_t f14;
114   uint64_t f15;
115   uint64_t f16;
116   uint64_t f17;
117   uint64_t f18;
118   uint64_t f19;
119   uint64_t f20;
120   uint64_t f21;
121   uint64_t f22;
122   uint64_t f23;
123   uint64_t f24;
124   uint64_t f25;
125   uint64_t f26;
126   uint64_t f27;
127   uint64_t f28;
128   uint64_t f29;
129   uint64_t f30;
130   uint64_t f31;
131   uint64_t fpscr;
132 } FPR;
133
134 typedef struct _VMX {
135   uint32_t v0[4];
136   uint32_t v1[4];
137   uint32_t v2[4];
138   uint32_t v3[4];
139   uint32_t v4[4];
140   uint32_t v5[4];
141   uint32_t v6[4];
142   uint32_t v7[4];
143   uint32_t v8[4];
144   uint32_t v9[4];
145   uint32_t v10[4];
146   uint32_t v11[4];
147   uint32_t v12[4];
148   uint32_t v13[4];
149   uint32_t v14[4];
150   uint32_t v15[4];
151   uint32_t v16[4];
152   uint32_t v17[4];
153   uint32_t v18[4];
154   uint32_t v19[4];
155   uint32_t v20[4];
156   uint32_t v21[4];
157   uint32_t v22[4];
158   uint32_t v23[4];
159   uint32_t v24[4];
160   uint32_t v25[4];
161   uint32_t v26[4];
162   uint32_t v27[4];
163   uint32_t v28[4];
164   uint32_t v29[4];
165   uint32_t v30[4];
166   uint32_t v31[4];
167   uint32_t pad[2];
168   uint32_t vrsave;
169   uint32_t vscr;
170 } VMX;
171
172 //---------------------------------------------------------------------------
173 // Include RegisterInfos_powerpc to declare our g_register_infos_powerpc
174 // structure.
175 //---------------------------------------------------------------------------
176 #define DECLARE_REGISTER_INFOS_POWERPC_STRUCT
177 #include "RegisterInfos_powerpc.h"
178 #undef DECLARE_REGISTER_INFOS_POWERPC_STRUCT
179
180 RegisterContextFreeBSD_powerpc::RegisterContextFreeBSD_powerpc(
181     const ArchSpec &target_arch)
182     : RegisterInfoInterface(target_arch) {}
183
184 RegisterContextFreeBSD_powerpc::~RegisterContextFreeBSD_powerpc() {}
185
186 size_t RegisterContextFreeBSD_powerpc::GetGPRSize() const {
187   // This is an 'abstract' base, so no GPR struct.
188   return 0;
189 }
190
191 const RegisterInfo *RegisterContextFreeBSD_powerpc::GetRegisterInfo() const {
192   // assert (m_target_arch.GetCore() == ArchSpec::eCore_powerpc);
193   llvm_unreachable("Abstract class!");
194   return NULL;
195 }
196
197 uint32_t RegisterContextFreeBSD_powerpc::GetRegisterCount() const { return 0; }
198
199 RegisterContextFreeBSD_powerpc32::RegisterContextFreeBSD_powerpc32(
200     const ArchSpec &target_arch)
201     : RegisterContextFreeBSD_powerpc(target_arch) {}
202
203 RegisterContextFreeBSD_powerpc32::~RegisterContextFreeBSD_powerpc32() {}
204
205 size_t RegisterContextFreeBSD_powerpc32::GetGPRSize() const {
206   return sizeof(GPR32);
207 }
208
209 const RegisterInfo *RegisterContextFreeBSD_powerpc32::GetRegisterInfo() const {
210   // assert (m_target_arch.GetCore() == ArchSpec::eCore_powerpc);
211   return g_register_infos_powerpc32;
212 }
213
214 uint32_t RegisterContextFreeBSD_powerpc32::GetRegisterCount() const {
215   return static_cast<uint32_t>(sizeof(g_register_infos_powerpc32) /
216                                sizeof(g_register_infos_powerpc32[0]));
217 }
218
219 RegisterContextFreeBSD_powerpc64::RegisterContextFreeBSD_powerpc64(
220     const ArchSpec &target_arch)
221     : RegisterContextFreeBSD_powerpc(target_arch) {}
222
223 RegisterContextFreeBSD_powerpc64::~RegisterContextFreeBSD_powerpc64() {}
224
225 size_t RegisterContextFreeBSD_powerpc64::GetGPRSize() const {
226   return sizeof(GPR64);
227 }
228
229 const RegisterInfo *RegisterContextFreeBSD_powerpc64::GetRegisterInfo() const {
230   // assert (m_target_arch.GetCore() == ArchSpec::eCore_powerpc);
231   if (m_target_arch.GetMachine() == llvm::Triple::ppc)
232     return g_register_infos_powerpc64_32;
233   return g_register_infos_powerpc64;
234 }
235
236 uint32_t RegisterContextFreeBSD_powerpc64::GetRegisterCount() const {
237   return static_cast<uint32_t>(sizeof(g_register_infos_powerpc64) /
238                                sizeof(g_register_infos_powerpc64[0]));
239 }