]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_powerpc.h
Merge ^/head r293850 through r294089.
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / source / Plugins / Process / Utility / RegisterContextPOSIX_powerpc.h
1 //===-- RegisterContextPOSIX_powerpc.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_RegisterContextPOSIX_powerpc_h_
11 #define liblldb_RegisterContextPOSIX_powerpc_h_
12
13 // C Includes
14 // C++ Includes
15 // Other libraries and framework includes
16 // Project includes
17 #include "lldb/Core/Log.h"
18 #include "lldb/Target/RegisterContext.h"
19 #include "RegisterInfoInterface.h"
20 #include "RegisterContext_powerpc.h"
21
22 class ProcessMonitor;
23
24 // ---------------------------------------------------------------------------
25 // Internal codes for all powerpc registers.
26 // ---------------------------------------------------------------------------
27 enum
28 {
29     k_first_gpr_powerpc,
30     gpr_r0_powerpc = k_first_gpr_powerpc,
31     gpr_r1_powerpc,
32     gpr_r2_powerpc,
33     gpr_r3_powerpc,
34     gpr_r4_powerpc,
35     gpr_r5_powerpc,
36     gpr_r6_powerpc,
37     gpr_r7_powerpc,
38     gpr_r8_powerpc,
39     gpr_r9_powerpc,
40     gpr_r10_powerpc,
41     gpr_r11_powerpc,
42     gpr_r12_powerpc,
43     gpr_r13_powerpc,
44     gpr_r14_powerpc,
45     gpr_r15_powerpc,
46     gpr_r16_powerpc,
47     gpr_r17_powerpc,
48     gpr_r18_powerpc,
49     gpr_r19_powerpc,
50     gpr_r20_powerpc,
51     gpr_r21_powerpc,
52     gpr_r22_powerpc,
53     gpr_r23_powerpc,
54     gpr_r24_powerpc,
55     gpr_r25_powerpc,
56     gpr_r26_powerpc,
57     gpr_r27_powerpc,
58     gpr_r28_powerpc,
59     gpr_r29_powerpc,
60     gpr_r30_powerpc,
61     gpr_r31_powerpc,
62     gpr_lr_powerpc,
63     gpr_cr_powerpc,
64     gpr_xer_powerpc,
65     gpr_ctr_powerpc,
66     gpr_pc_powerpc,
67     k_last_gpr_powerpc = gpr_pc_powerpc,
68
69     k_first_fpr,
70     fpr_f0_powerpc = k_first_fpr,
71     fpr_f1_powerpc,
72     fpr_f2_powerpc,
73     fpr_f3_powerpc,
74     fpr_f4_powerpc,
75     fpr_f5_powerpc,
76     fpr_f6_powerpc,
77     fpr_f7_powerpc,
78     fpr_f8_powerpc,
79     fpr_f9_powerpc,
80     fpr_f10_powerpc,
81     fpr_f11_powerpc,
82     fpr_f12_powerpc,
83     fpr_f13_powerpc,
84     fpr_f14_powerpc,
85     fpr_f15_powerpc,
86     fpr_f16_powerpc,
87     fpr_f17_powerpc,
88     fpr_f18_powerpc,
89     fpr_f19_powerpc,
90     fpr_f20_powerpc,
91     fpr_f21_powerpc,
92     fpr_f22_powerpc,
93     fpr_f23_powerpc,
94     fpr_f24_powerpc,
95     fpr_f25_powerpc,
96     fpr_f26_powerpc,
97     fpr_f27_powerpc,
98     fpr_f28_powerpc,
99     fpr_f29_powerpc,
100     fpr_f30_powerpc,
101     fpr_f31_powerpc,
102     fpr_fpscr_powerpc,
103     k_last_fpr = fpr_fpscr_powerpc,
104
105     k_first_vmx,
106     vmx_v0_powerpc = k_first_vmx,
107     vmx_v1_powerpc,
108     vmx_v2_powerpc,
109     vmx_v3_powerpc,
110     vmx_v4_powerpc,
111     vmx_v5_powerpc,
112     vmx_v6_powerpc,
113     vmx_v7_powerpc,
114     vmx_v8_powerpc,
115     vmx_v9_powerpc,
116     vmx_v10_powerpc,
117     vmx_v11_powerpc,
118     vmx_v12_powerpc,
119     vmx_v13_powerpc,
120     vmx_v14_powerpc,
121     vmx_v15_powerpc,
122     vmx_v16_powerpc,
123     vmx_v17_powerpc,
124     vmx_v18_powerpc,
125     vmx_v19_powerpc,
126     vmx_v20_powerpc,
127     vmx_v21_powerpc,
128     vmx_v22_powerpc,
129     vmx_v23_powerpc,
130     vmx_v24_powerpc,
131     vmx_v25_powerpc,
132     vmx_v26_powerpc,
133     vmx_v27_powerpc,
134     vmx_v28_powerpc,
135     vmx_v29_powerpc,
136     vmx_v30_powerpc,
137     vmx_v31_powerpc,
138     vmx_vrsave_powerpc,
139     vmx_vscr_powerpc,
140     k_last_vmx = vmx_vscr_powerpc,
141
142     k_num_registers_powerpc,
143     k_num_gpr_registers_powerpc = k_last_gpr_powerpc - k_first_gpr_powerpc + 1,
144     k_num_fpr_registers_powerpc = k_last_fpr - k_first_fpr + 1,
145     k_num_vmx_registers_powerpc = k_last_vmx - k_first_vmx + 1,
146 };
147
148 class RegisterContextPOSIX_powerpc
149   : public lldb_private::RegisterContext
150 {
151 public:
152     RegisterContextPOSIX_powerpc (lldb_private::Thread &thread,
153                             uint32_t concrete_frame_idx,
154                             lldb_private::RegisterInfoInterface *register_info);
155
156     ~RegisterContextPOSIX_powerpc() override;
157
158     void
159     Invalidate();
160
161     void
162     InvalidateAllRegisters() override;
163
164     size_t
165     GetRegisterCount() override;
166
167     virtual size_t
168     GetGPRSize();
169
170     virtual unsigned
171     GetRegisterSize(unsigned reg);
172
173     virtual unsigned
174     GetRegisterOffset(unsigned reg);
175
176     const lldb_private::RegisterInfo *
177     GetRegisterInfoAtIndex(size_t reg) override;
178
179     size_t
180     GetRegisterSetCount() override;
181
182     const lldb_private::RegisterSet *
183     GetRegisterSet(size_t set) override;
184
185     const char *
186     GetRegisterName(unsigned reg);
187
188     uint32_t
189     ConvertRegisterKindToRegisterNumber(lldb::RegisterKind kind, uint32_t num) override;
190
191 protected:
192     uint64_t m_gpr_powerpc[k_num_gpr_registers_powerpc];         // general purpose registers.
193     uint64_t m_fpr_powerpc[k_num_fpr_registers_powerpc];         // floating point registers.
194     uint32_t m_vmx_powerpc[k_num_vmx_registers_powerpc][4];
195     std::unique_ptr<lldb_private::RegisterInfoInterface> m_register_info_ap; // Register Info Interface (FreeBSD or Linux)
196
197     // Determines if an extended register set is supported on the processor running the inferior process.
198     virtual bool
199     IsRegisterSetAvailable(size_t set_index);
200
201     virtual const lldb_private::RegisterInfo *
202     GetRegisterInfo();
203
204     bool
205     IsGPR(unsigned reg);
206
207     bool
208     IsFPR(unsigned reg);
209
210     bool
211     IsVMX(unsigned reg);
212
213     lldb::ByteOrder GetByteOrder();
214
215     virtual bool ReadGPR() = 0;
216     virtual bool ReadFPR() = 0;
217     virtual bool ReadVMX() = 0;
218     virtual bool WriteGPR() = 0;
219     virtual bool WriteFPR() = 0;
220     virtual bool WriteVMX() = 0;
221 };
222
223 #endif // liblldb_RegisterContextPOSIX_powerpc_h_