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