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 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 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