]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/source/Plugins/Process/Utility/RegisterContextPOSIX_powerpc.h
Update LLDB snapshot to upstream r225923 (git 2b588ecd)
[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 #include "lldb/Core/Log.h"
14 #include "RegisterContextPOSIX.h"
15 #include "RegisterContext_powerpc.h"
16
17 class ProcessMonitor;
18
19 // ---------------------------------------------------------------------------
20 // Internal codes for all powerpc registers.
21 // ---------------------------------------------------------------------------
22 enum
23 {
24     k_first_gpr_powerpc,
25     gpr_r0_powerpc = k_first_gpr_powerpc,
26     gpr_r1_powerpc,
27     gpr_r2_powerpc,
28     gpr_r3_powerpc,
29     gpr_r4_powerpc,
30     gpr_r5_powerpc,
31     gpr_r6_powerpc,
32     gpr_r7_powerpc,
33     gpr_r8_powerpc,
34     gpr_r9_powerpc,
35     gpr_r10_powerpc,
36     gpr_r11_powerpc,
37     gpr_r12_powerpc,
38     gpr_r13_powerpc,
39     gpr_r14_powerpc,
40     gpr_r15_powerpc,
41     gpr_r16_powerpc,
42     gpr_r17_powerpc,
43     gpr_r18_powerpc,
44     gpr_r19_powerpc,
45     gpr_r20_powerpc,
46     gpr_r21_powerpc,
47     gpr_r22_powerpc,
48     gpr_r23_powerpc,
49     gpr_r24_powerpc,
50     gpr_r25_powerpc,
51     gpr_r26_powerpc,
52     gpr_r27_powerpc,
53     gpr_r28_powerpc,
54     gpr_r29_powerpc,
55     gpr_r30_powerpc,
56     gpr_r31_powerpc,
57     gpr_lr_powerpc,
58     gpr_cr_powerpc,
59     gpr_xer_powerpc,
60     gpr_ctr_powerpc,
61     gpr_pc_powerpc,
62     k_last_gpr_powerpc = gpr_pc_powerpc,
63
64     k_first_fpr,
65     fpr_f0_powerpc = k_first_fpr,
66     fpr_f1_powerpc,
67     fpr_f2_powerpc,
68     fpr_f3_powerpc,
69     fpr_f4_powerpc,
70     fpr_f5_powerpc,
71     fpr_f6_powerpc,
72     fpr_f7_powerpc,
73     fpr_f8_powerpc,
74     fpr_f9_powerpc,
75     fpr_f10_powerpc,
76     fpr_f11_powerpc,
77     fpr_f12_powerpc,
78     fpr_f13_powerpc,
79     fpr_f14_powerpc,
80     fpr_f15_powerpc,
81     fpr_f16_powerpc,
82     fpr_f17_powerpc,
83     fpr_f18_powerpc,
84     fpr_f19_powerpc,
85     fpr_f20_powerpc,
86     fpr_f21_powerpc,
87     fpr_f22_powerpc,
88     fpr_f23_powerpc,
89     fpr_f24_powerpc,
90     fpr_f25_powerpc,
91     fpr_f26_powerpc,
92     fpr_f27_powerpc,
93     fpr_f28_powerpc,
94     fpr_f29_powerpc,
95     fpr_f30_powerpc,
96     fpr_f31_powerpc,
97     fpr_fpscr_powerpc,
98     k_last_fpr = fpr_fpscr_powerpc,
99
100     k_num_registers_powerpc,
101     k_num_gpr_registers_powerpc = k_last_gpr_powerpc - k_first_gpr_powerpc + 1,
102     k_num_fpr_registers_powerpc = k_last_fpr - k_first_fpr + 1,
103 };
104
105 class RegisterContextPOSIX_powerpc
106   : public lldb_private::RegisterContext
107 {
108 public:
109     RegisterContextPOSIX_powerpc (lldb_private::Thread &thread,
110                             uint32_t concrete_frame_idx,
111                             lldb_private::RegisterInfoInterface *register_info);
112
113     ~RegisterContextPOSIX_powerpc();
114
115     void
116     Invalidate();
117
118     void
119     InvalidateAllRegisters();
120
121     size_t
122     GetRegisterCount();
123
124     virtual size_t
125     GetGPRSize();
126
127     virtual unsigned
128     GetRegisterSize(unsigned reg);
129
130     virtual unsigned
131     GetRegisterOffset(unsigned reg);
132
133     const lldb_private::RegisterInfo *
134     GetRegisterInfoAtIndex(size_t reg);
135
136     size_t
137     GetRegisterSetCount();
138
139     const lldb_private::RegisterSet *
140     GetRegisterSet(size_t set);
141
142     const char *
143     GetRegisterName(unsigned reg);
144
145     uint32_t
146     ConvertRegisterKindToRegisterNumber(lldb::RegisterKind kind, uint32_t num);
147
148 protected:
149     uint64_t m_gpr_powerpc[k_num_gpr_registers_powerpc];         // general purpose registers.
150     std::unique_ptr<lldb_private::RegisterInfoInterface> m_register_info_ap; // Register Info Interface (FreeBSD or Linux)
151
152     // Determines if an extended register set is supported on the processor running the inferior process.
153     virtual bool
154     IsRegisterSetAvailable(size_t set_index);
155
156     virtual const lldb_private::RegisterInfo *
157     GetRegisterInfo();
158
159     bool
160     IsGPR(unsigned reg);
161
162     bool
163     IsFPR(unsigned reg);
164
165     lldb::ByteOrder GetByteOrder();
166
167     virtual bool ReadGPR() = 0;
168     virtual bool ReadFPR() = 0;
169     virtual bool WriteGPR() = 0;
170     virtual bool WriteFPR() = 0;
171 };
172
173 #endif // #ifndef liblldb_RegisterContextPOSIX_powerpc_H_