1 //===-- CodeViewRegisterMapping.cpp ---------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8
9 #include "CodeViewRegisterMapping.h"
10
11 #include "lldb/lldb-defines.h"
12
13 #include "Plugins/Process/Utility/lldb-x86-register-enums.h"
14
15 using namespace lldb_private;
16
17 static const uint32_t g_code_view_to_lldb_registers_x86[] = {
18 LLDB_INVALID_REGNUM, // NONE
19 lldb_al_i386, // AL
20 lldb_cl_i386, // CL
21 lldb_dl_i386, // DL
22 lldb_bl_i386, // BL
23 lldb_ah_i386, // AH
24 lldb_ch_i386, // CH
25 lldb_dh_i386, // DH
26 lldb_bh_i386, // BH
27 lldb_ax_i386, // AX
28 lldb_cx_i386, // CX
29 lldb_dx_i386, // DX
30 lldb_bx_i386, // BX
31 lldb_sp_i386, // SP
32 lldb_bp_i386, // BP
33 lldb_si_i386, // SI
34 lldb_di_i386, // DI
35 lldb_eax_i386, // EAX
36 lldb_ecx_i386, // ECX
37 lldb_edx_i386, // EDX
38 lldb_ebx_i386, // EBX
39 lldb_esp_i386, // ESP
40 lldb_ebp_i386, // EBP
41 lldb_esi_i386, // ESI
42 lldb_edi_i386, // EDI
43 lldb_es_i386, // ES
44 lldb_cs_i386, // CS
45 lldb_ss_i386, // SS
46 lldb_ds_i386, // DS
47 lldb_fs_i386, // FS
48 lldb_gs_i386, // GS
49 LLDB_INVALID_REGNUM, // IP
50 LLDB_INVALID_REGNUM, // FLAGS
51 lldb_eip_i386, // EIP
52 lldb_eflags_i386, // EFLAGS
53 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
54 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
55 LLDB_INVALID_REGNUM, // TEMP
56 LLDB_INVALID_REGNUM, // TEMPH
57 LLDB_INVALID_REGNUM, // QUOTE
58 LLDB_INVALID_REGNUM, // PCDR3
59 LLDB_INVALID_REGNUM, // PCDR4
60 LLDB_INVALID_REGNUM, // PCDR5
61 LLDB_INVALID_REGNUM, // PCDR6
62 LLDB_INVALID_REGNUM, // PCDR7
63 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
64 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
65 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
66 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
67 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
68 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
69 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
70 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
71 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
72 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
73 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
74 LLDB_INVALID_REGNUM, // CR0
75 LLDB_INVALID_REGNUM, // CR1
76 LLDB_INVALID_REGNUM, // CR2
77 LLDB_INVALID_REGNUM, // CR3
78 LLDB_INVALID_REGNUM, // CR4
79 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
80 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
81 lldb_dr0_i386, // DR0
82 lldb_dr1_i386, // DR1
83 lldb_dr2_i386, // DR2
84 lldb_dr3_i386, // DR3
85 lldb_dr4_i386, // DR4
86 lldb_dr5_i386, // DR5
87 lldb_dr6_i386, // DR6
88 lldb_dr7_i386, // DR7
89 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
90 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
91 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
92 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
93 LLDB_INVALID_REGNUM, // GDTR
94 LLDB_INVALID_REGNUM, // GDTL
95 LLDB_INVALID_REGNUM, // IDTR
96 LLDB_INVALID_REGNUM, // IDTL
97 LLDB_INVALID_REGNUM, // LDTR
98 LLDB_INVALID_REGNUM, // TR
99 LLDB_INVALID_REGNUM, // PSEUDO1
100 LLDB_INVALID_REGNUM, // PSEUDO2
101 LLDB_INVALID_REGNUM, // PSEUDO3
102 LLDB_INVALID_REGNUM, // PSEUDO4
103 LLDB_INVALID_REGNUM, // PSEUDO5
104 LLDB_INVALID_REGNUM, // PSEUDO6
105 LLDB_INVALID_REGNUM, // PSEUDO7
106 LLDB_INVALID_REGNUM, // PSEUDO8
107 LLDB_INVALID_REGNUM, // PSEUDO9
108 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
109 lldb_st0_i386, // ST0
110 lldb_st1_i386, // ST1
111 lldb_st2_i386, // ST2
112 lldb_st3_i386, // ST3
113 lldb_st4_i386, // ST4
114 lldb_st5_i386, // ST5
115 lldb_st6_i386, // ST6
116 lldb_st7_i386, // ST7
117 LLDB_INVALID_REGNUM, // CTRL
118 LLDB_INVALID_REGNUM, // STAT
119 LLDB_INVALID_REGNUM, // TAG
120 LLDB_INVALID_REGNUM, // FPIP
121 LLDB_INVALID_REGNUM, // FPCS
122 LLDB_INVALID_REGNUM, // FPDO
123 LLDB_INVALID_REGNUM, // FPDS
124 LLDB_INVALID_REGNUM, // ISEM
125 LLDB_INVALID_REGNUM, // FPEIP
126 LLDB_INVALID_REGNUM, // FPEDO
127 lldb_mm0_i386, // MM0
128 lldb_mm1_i386, // MM1
129 lldb_mm2_i386, // MM2
130 lldb_mm3_i386, // MM3
131 lldb_mm4_i386, // MM4
132 lldb_mm5_i386, // MM5
133 lldb_mm6_i386, // MM6
134 lldb_mm7_i386, // MM7
135 lldb_xmm0_i386, // XMM0
136 lldb_xmm1_i386, // XMM1
137 lldb_xmm2_i386, // XMM2
138 lldb_xmm3_i386, // XMM3
139 lldb_xmm4_i386, // XMM4
140 lldb_xmm5_i386, // XMM5
141 lldb_xmm6_i386, // XMM6
142 lldb_xmm7_i386 // XMM7
143 };
144
145 static const uint32_t g_code_view_to_lldb_registers_x86_64[] = {
146 LLDB_INVALID_REGNUM, // NONE
147 lldb_al_x86_64, // AL
148 lldb_cl_x86_64, // CL
149 lldb_dl_x86_64, // DL
150 lldb_bl_x86_64, // BL
151 lldb_ah_x86_64, // AH
152 lldb_ch_x86_64, // CH
153 lldb_dh_x86_64, // DH
154 lldb_bh_x86_64, // BH
155 lldb_ax_x86_64, // AX
156 lldb_cx_x86_64, // CX
157 lldb_dx_x86_64, // DX
158 lldb_bx_x86_64, // BX
159 lldb_sp_x86_64, // SP
160 lldb_bp_x86_64, // BP
161 lldb_si_x86_64, // SI
162 lldb_di_x86_64, // DI
163 lldb_eax_x86_64, // EAX
164 lldb_ecx_x86_64, // ECX
165 lldb_edx_x86_64, // EDX
166 lldb_ebx_x86_64, // EBX
167 lldb_esp_x86_64, // ESP
168 lldb_ebp_x86_64, // EBP
169 lldb_esi_x86_64, // ESI
170 lldb_edi_x86_64, // EDI
171 lldb_es_x86_64, // ES
172 lldb_cs_x86_64, // CS
173 lldb_ss_x86_64, // SS
174 lldb_ds_x86_64, // DS
175 lldb_fs_x86_64, // FS
176 lldb_gs_x86_64, // GS
177 LLDB_INVALID_REGNUM, // IP
178 LLDB_INVALID_REGNUM, // FLAGS
179 LLDB_INVALID_REGNUM, // EIP
180 LLDB_INVALID_REGNUM, // EFLAGS
181 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
182 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
183 LLDB_INVALID_REGNUM, // TEMP
184 LLDB_INVALID_REGNUM, // TEMPH
185 LLDB_INVALID_REGNUM, // QUOTE
186 LLDB_INVALID_REGNUM, // PCDR3
187 LLDB_INVALID_REGNUM, // PCDR4
188 LLDB_INVALID_REGNUM, // PCDR5
189 LLDB_INVALID_REGNUM, // PCDR6
190 LLDB_INVALID_REGNUM, // PCDR7
191 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
192 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
193 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
194 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
195 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
196 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
197 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
198 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
199 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
200 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
201 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
202 LLDB_INVALID_REGNUM, // CR0
203 LLDB_INVALID_REGNUM, // CR1
204 LLDB_INVALID_REGNUM, // CR2
205 LLDB_INVALID_REGNUM, // CR3
206 LLDB_INVALID_REGNUM, // CR4
207 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
208 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
209 lldb_dr0_x86_64, // DR0
210 lldb_dr1_x86_64, // DR1
211 lldb_dr2_x86_64, // DR2
212 lldb_dr3_x86_64, // DR3
213 lldb_dr4_x86_64, // DR4
214 lldb_dr5_x86_64, // DR5
215 lldb_dr6_x86_64, // DR6
216 lldb_dr7_x86_64, // DR7
217 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
218 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
219 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
220 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
221 LLDB_INVALID_REGNUM, // GDTR
222 LLDB_INVALID_REGNUM, // GDTL
223 LLDB_INVALID_REGNUM, // IDTR
224 LLDB_INVALID_REGNUM, // IDTL
225 LLDB_INVALID_REGNUM, // LDTR
226 LLDB_INVALID_REGNUM, // TR
227 LLDB_INVALID_REGNUM, // PSEUDO1
228 LLDB_INVALID_REGNUM, // PSEUDO2
229 LLDB_INVALID_REGNUM, // PSEUDO3
230 LLDB_INVALID_REGNUM, // PSEUDO4
231 LLDB_INVALID_REGNUM, // PSEUDO5
232 LLDB_INVALID_REGNUM, // PSEUDO6
233 LLDB_INVALID_REGNUM, // PSEUDO7
234 LLDB_INVALID_REGNUM, // PSEUDO8
235 LLDB_INVALID_REGNUM, // PSEUDO9
236 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
237 lldb_st0_x86_64, // ST0
238 lldb_st1_x86_64, // ST1
239 lldb_st2_x86_64, // ST2
240 lldb_st3_x86_64, // ST3
241 lldb_st4_x86_64, // ST4
242 lldb_st5_x86_64, // ST5
243 lldb_st6_x86_64, // ST6
244 lldb_st7_x86_64, // ST7
245 LLDB_INVALID_REGNUM, // CTRL
246 LLDB_INVALID_REGNUM, // STAT
247 LLDB_INVALID_REGNUM, // TAG
248 LLDB_INVALID_REGNUM, // FPIP
249 LLDB_INVALID_REGNUM, // FPCS
250 LLDB_INVALID_REGNUM, // FPDO
251 LLDB_INVALID_REGNUM, // FPDS
252 LLDB_INVALID_REGNUM, // ISEM
253 LLDB_INVALID_REGNUM, // FPEIP
254 LLDB_INVALID_REGNUM, // FPEDO
255 lldb_mm0_x86_64, // MM0
256 lldb_mm1_x86_64, // MM1
257 lldb_mm2_x86_64, // MM2
258 lldb_mm3_x86_64, // MM3
259 lldb_mm4_x86_64, // MM4
260 lldb_mm5_x86_64, // MM5
261 lldb_mm6_x86_64, // MM6
262 lldb_mm7_x86_64, // MM7
263 lldb_xmm0_x86_64, // XMM0
264 lldb_xmm1_x86_64, // XMM1
265 lldb_xmm2_x86_64, // XMM2
266 lldb_xmm3_x86_64, // XMM3
267 lldb_xmm4_x86_64, // XMM4
268 lldb_xmm5_x86_64, // XMM5
269 lldb_xmm6_x86_64, // XMM6
270 lldb_xmm7_x86_64, // XMM7
271 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
272 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
273 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
274 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
275 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
276 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
277 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
278 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
279 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
280 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
281 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
282 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
283 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
284 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
285 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
286 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
287 LLDB_INVALID_REGNUM,
288 lldb_mxcsr_x86_64, // MXCSR
289 LLDB_INVALID_REGNUM, // EDXEAX
290 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
291 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
292 LLDB_INVALID_REGNUM,
293 LLDB_INVALID_REGNUM, // EMM0L
294 LLDB_INVALID_REGNUM, // EMM1L
295 LLDB_INVALID_REGNUM, // EMM2L
296 LLDB_INVALID_REGNUM, // EMM3L
297 LLDB_INVALID_REGNUM, // EMM4L
298 LLDB_INVALID_REGNUM, // EMM5L
299 LLDB_INVALID_REGNUM, // EMM6L
300 LLDB_INVALID_REGNUM, // EMM7L
301 LLDB_INVALID_REGNUM, // EMM0H
302 LLDB_INVALID_REGNUM, // EMM1H
303 LLDB_INVALID_REGNUM, // EMM2H
304 LLDB_INVALID_REGNUM, // EMM3H
305 LLDB_INVALID_REGNUM, // EMM4H
306 LLDB_INVALID_REGNUM, // EMM5H
307 LLDB_INVALID_REGNUM, // EMM6H
308 LLDB_INVALID_REGNUM, // EMM7H
309 LLDB_INVALID_REGNUM, // MM00
310 LLDB_INVALID_REGNUM, // MM01
311 LLDB_INVALID_REGNUM, // MM10
312 LLDB_INVALID_REGNUM, // MM11
313 LLDB_INVALID_REGNUM, // MM20
314 LLDB_INVALID_REGNUM, // MM21
315 LLDB_INVALID_REGNUM, // MM30
316 LLDB_INVALID_REGNUM, // MM31
317 LLDB_INVALID_REGNUM, // MM40
318 LLDB_INVALID_REGNUM, // MM41
319 LLDB_INVALID_REGNUM, // MM50
320 LLDB_INVALID_REGNUM, // MM51
321 LLDB_INVALID_REGNUM, // MM60
322 LLDB_INVALID_REGNUM, // MM61
323 LLDB_INVALID_REGNUM, // MM70
324 LLDB_INVALID_REGNUM, // MM71
325 lldb_xmm8_x86_64, // XMM8
326 lldb_xmm9_x86_64, // XMM9
327 lldb_xmm10_x86_64, // XMM10
328 lldb_xmm11_x86_64, // XMM11
329 lldb_xmm12_x86_64, // XMM12
330 lldb_xmm13_x86_64, // XMM13
331 lldb_xmm14_x86_64, // XMM14
332 lldb_xmm15_x86_64, // XMM15
333 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
334 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
335 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
336 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
337 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
338 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
339 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
340 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
341 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
342 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
343 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
344 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
345 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
346 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
347 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
348 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
349 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
350 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
351 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
352 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
353 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
354 LLDB_INVALID_REGNUM,
355 lldb_sil_x86_64, // SIL
356 lldb_dil_x86_64, // DIL
357 lldb_bpl_x86_64, // BPL
358 lldb_spl_x86_64, // SPL
359 lldb_rax_x86_64, // RAX
360 lldb_rbx_x86_64, // RBX
361 lldb_rcx_x86_64, // RCX
362 lldb_rdx_x86_64, // RDX
363 lldb_rsi_x86_64, // RSI
364 lldb_rdi_x86_64, // RDI
365 lldb_rbp_x86_64, // RBP
366 lldb_rsp_x86_64, // RSP
367 lldb_r8_x86_64, // R8
368 lldb_r9_x86_64, // R9
369 lldb_r10_x86_64, // R10
370 lldb_r11_x86_64, // R11
371 lldb_r12_x86_64, // R12
372 lldb_r13_x86_64, // R13
373 lldb_r14_x86_64, // R14
374 lldb_r15_x86_64, // R15
375 lldb_r8l_x86_64, // R8B
376 lldb_r9l_x86_64, // R9B
377 lldb_r10l_x86_64, // R10B
378 lldb_r11l_x86_64, // R11B
379 lldb_r12l_x86_64, // R12B
380 lldb_r13l_x86_64, // R13B
381 lldb_r14l_x86_64, // R14B
382 lldb_r15l_x86_64, // R15B
383 lldb_r8w_x86_64, // R8W
384 lldb_r9w_x86_64, // R9W
385 lldb_r10w_x86_64, // R10W
386 lldb_r11w_x86_64, // R11W
387 lldb_r12w_x86_64, // R12W
388 lldb_r13w_x86_64, // R13W
389 lldb_r14w_x86_64, // R14W
390 lldb_r15w_x86_64, // R15W
391 lldb_r8d_x86_64, // R8D
392 lldb_r9d_x86_64, // R9D
393 lldb_r10d_x86_64, // R10D
394 lldb_r11d_x86_64, // R11D
395 lldb_r12d_x86_64, // R12D
396 lldb_r13d_x86_64, // R13D
397 lldb_r14d_x86_64, // R14D
398 lldb_r15d_x86_64, // R15D
399 lldb_ymm0_x86_64, // AMD64_YMM0
400 lldb_ymm1_x86_64, // AMD64_YMM1
401 lldb_ymm2_x86_64, // AMD64_YMM2
402 lldb_ymm3_x86_64, // AMD64_YMM3
403 lldb_ymm4_x86_64, // AMD64_YMM4
404 lldb_ymm5_x86_64, // AMD64_YMM5
405 lldb_ymm6_x86_64, // AMD64_YMM6
406 lldb_ymm7_x86_64, // AMD64_YMM7
407 lldb_ymm8_x86_64, // AMD64_YMM8
408 lldb_ymm9_x86_64, // AMD64_YMM9
409 lldb_ymm10_x86_64, // AMD64_YMM10
410 lldb_ymm11_x86_64, // AMD64_YMM11
411 lldb_ymm12_x86_64, // AMD64_YMM12
412 lldb_ymm13_x86_64, // AMD64_YMM13
413 lldb_ymm14_x86_64, // AMD64_YMM14
414 lldb_ymm15_x86_64, // AMD64_YMM15
415 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
416 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
417 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
418 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,
419 lldb_bnd0_x86_64, // BND0
420 lldb_bnd1_x86_64, // BND1
421 lldb_bnd2_x86_64 // BND2
422 };
423
GetLLDBRegisterNumber(llvm::Triple::ArchType arch_type,llvm::codeview::RegisterId register_id)424 uint32_t lldb_private::npdb::GetLLDBRegisterNumber(
425 llvm::Triple::ArchType arch_type, llvm::codeview::RegisterId register_id) {
426 switch (arch_type) {
427 case llvm::Triple::x86:
428 if (static_cast<uint16_t>(register_id) <
429 sizeof(g_code_view_to_lldb_registers_x86) /
430 sizeof(g_code_view_to_lldb_registers_x86[0]))
431 return g_code_view_to_lldb_registers_x86[static_cast<uint16_t>(
432 register_id)];
433
434 switch (register_id) {
435 case llvm::codeview::RegisterId::MXCSR:
436 return lldb_mxcsr_i386;
437 case llvm::codeview::RegisterId::BND0:
438 return lldb_bnd0_i386;
439 case llvm::codeview::RegisterId::BND1:
440 return lldb_bnd1_i386;
441 case llvm::codeview::RegisterId::BND2:
442 return lldb_bnd2_i386;
443 default:
444 return LLDB_INVALID_REGNUM;
445 }
446 case llvm::Triple::x86_64:
447 if (static_cast<uint16_t>(register_id) <
448 sizeof(g_code_view_to_lldb_registers_x86_64) /
449 sizeof(g_code_view_to_lldb_registers_x86_64[0]))
450 return g_code_view_to_lldb_registers_x86_64[static_cast<uint16_t>(
451 register_id)];
452
453 return LLDB_INVALID_REGNUM;
454 default:
455 return LLDB_INVALID_REGNUM;
456 }
457 }
458