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