LLDB  mainline
CodeViewRegisterMapping.cpp
Go to the documentation of this file.
1 //===-- CodeViewRegisterMapping.cpp -----------------------------*- C++ -*-===//
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 
10 
11 #include "lldb/lldb-defines.h"
12 
14 
15 using namespace lldb_private;
16 
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
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
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
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
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
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 
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
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
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
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
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
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
288  lldb_mxcsr_x86_64, // MXCSR
289  LLDB_INVALID_REGNUM, // EDXEAX
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
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
419  lldb_bnd0_x86_64, // BND0
420  lldb_bnd1_x86_64, // BND1
421  lldb_bnd2_x86_64 // BND2
422 };
423 
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) <
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 }
Enumerations for broadcasting.
Definition: SBLaunchInfo.h:14
uint32_t GetLLDBRegisterNumber(llvm::Triple::ArchType arch_type, llvm::codeview::RegisterId register_id)
static const uint32_t g_code_view_to_lldb_registers_x86[]
static const uint32_t g_code_view_to_lldb_registers_x86_64[]
#define LLDB_INVALID_REGNUM
Definition: lldb-defines.h:90