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-arm64-register-enums.h" 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_arm64[] = { 19 LLDB_INVALID_REGNUM, // NONE 20 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 21 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 22 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 23 gpr_w0_arm64, // ARM64_W0, 10) 24 gpr_w1_arm64, // ARM64_W1, 11) 25 gpr_w2_arm64, // ARM64_W2, 12) 26 gpr_w3_arm64, // ARM64_W3, 13) 27 gpr_w4_arm64, // ARM64_W4, 14) 28 gpr_w5_arm64, // ARM64_W5, 15) 29 gpr_w6_arm64, // ARM64_W6, 16) 30 gpr_w7_arm64, // ARM64_W7, 17) 31 gpr_w8_arm64, // ARM64_W8, 18) 32 gpr_w9_arm64, // ARM64_W9, 19) 33 gpr_w10_arm64, // ARM64_W10, 20) 34 gpr_w11_arm64, // ARM64_W11, 21) 35 gpr_w12_arm64, // ARM64_W12, 22) 36 gpr_w13_arm64, // ARM64_W13, 23) 37 gpr_w14_arm64, // ARM64_W14, 24) 38 gpr_w15_arm64, // ARM64_W15, 25) 39 gpr_w16_arm64, // ARM64_W16, 26) 40 gpr_w17_arm64, // ARM64_W17, 27) 41 gpr_w18_arm64, // ARM64_W18, 28) 42 gpr_w19_arm64, // ARM64_W19, 29) 43 gpr_w20_arm64, // ARM64_W20, 30) 44 gpr_w21_arm64, // ARM64_W21, 31) 45 gpr_w22_arm64, // ARM64_W22, 32) 46 gpr_w23_arm64, // ARM64_W23, 33) 47 gpr_w24_arm64, // ARM64_W24, 34) 48 gpr_w25_arm64, // ARM64_W25, 35) 49 gpr_w26_arm64, // ARM64_W26, 36) 50 gpr_w27_arm64, // ARM64_W27, 37) 51 gpr_w28_arm64, // ARM64_W28, 38) 52 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 53 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 54 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 55 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 56 gpr_x0_arm64, // ARM64_X0, 50) 57 gpr_x1_arm64, // ARM64_X1, 51) 58 gpr_x2_arm64, // ARM64_X2, 52) 59 gpr_x3_arm64, // ARM64_X3, 53) 60 gpr_x4_arm64, // ARM64_X4, 54) 61 gpr_x5_arm64, // ARM64_X5, 55) 62 gpr_x6_arm64, // ARM64_X6, 56) 63 gpr_x7_arm64, // ARM64_X7, 57) 64 gpr_x8_arm64, // ARM64_X8, 58) 65 gpr_x9_arm64, // ARM64_X9, 59) 66 gpr_x10_arm64, // ARM64_X10, 60) 67 gpr_x11_arm64, // ARM64_X11, 61) 68 gpr_x12_arm64, // ARM64_X12, 62) 69 gpr_x13_arm64, // ARM64_X13, 63) 70 gpr_x14_arm64, // ARM64_X14, 64) 71 gpr_x15_arm64, // ARM64_X15, 65) 72 gpr_x16_arm64, // ARM64_X16, 66) 73 gpr_x17_arm64, // ARM64_X17, 67) 74 gpr_x18_arm64, // ARM64_X18, 68) 75 gpr_x19_arm64, // ARM64_X19, 69) 76 gpr_x20_arm64, // ARM64_X20, 70) 77 gpr_x21_arm64, // ARM64_X21, 71) 78 gpr_x22_arm64, // ARM64_X22, 72) 79 gpr_x23_arm64, // ARM64_X23, 73) 80 gpr_x24_arm64, // ARM64_X24, 74) 81 gpr_x25_arm64, // ARM64_X25, 75) 82 gpr_x26_arm64, // ARM64_X26, 76) 83 gpr_x27_arm64, // ARM64_X27, 77) 84 gpr_x28_arm64, // ARM64_X28, 78) 85 gpr_fp_arm64, // ARM64_FP, 79) 86 gpr_lr_arm64, // ARM64_LR, 80) 87 gpr_sp_arm64, // ARM64_SP, 81) 88 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 89 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 90 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 91 gpr_cpsr_arm64, // ARM64_NZCV, 90) 92 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 93 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 94 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 95 fpu_s0_arm64, // (ARM64_S0, 100) 96 fpu_s1_arm64, // (ARM64_S1, 101) 97 fpu_s2_arm64, // (ARM64_S2, 102) 98 fpu_s3_arm64, // (ARM64_S3, 103) 99 fpu_s4_arm64, // (ARM64_S4, 104) 100 fpu_s5_arm64, // (ARM64_S5, 105) 101 fpu_s6_arm64, // (ARM64_S6, 106) 102 fpu_s7_arm64, // (ARM64_S7, 107) 103 fpu_s8_arm64, // (ARM64_S8, 108) 104 fpu_s9_arm64, // (ARM64_S9, 109) 105 fpu_s10_arm64, // (ARM64_S10, 110) 106 fpu_s11_arm64, // (ARM64_S11, 111) 107 fpu_s12_arm64, // (ARM64_S12, 112) 108 fpu_s13_arm64, // (ARM64_S13, 113) 109 fpu_s14_arm64, // (ARM64_S14, 114) 110 fpu_s15_arm64, // (ARM64_S15, 115) 111 fpu_s16_arm64, // (ARM64_S16, 116) 112 fpu_s17_arm64, // (ARM64_S17, 117) 113 fpu_s18_arm64, // (ARM64_S18, 118) 114 fpu_s19_arm64, // (ARM64_S19, 119) 115 fpu_s20_arm64, // (ARM64_S20, 120) 116 fpu_s21_arm64, // (ARM64_S21, 121) 117 fpu_s22_arm64, // (ARM64_S22, 122) 118 fpu_s23_arm64, // (ARM64_S23, 123) 119 fpu_s24_arm64, // (ARM64_S24, 124) 120 fpu_s25_arm64, // (ARM64_S25, 125) 121 fpu_s26_arm64, // (ARM64_S26, 126) 122 fpu_s27_arm64, // (ARM64_S27, 127) 123 fpu_s28_arm64, // (ARM64_S28, 128) 124 fpu_s29_arm64, // (ARM64_S29, 129) 125 fpu_s30_arm64, // (ARM64_S30, 130) 126 fpu_s31_arm64, // (ARM64_S31, 131) 127 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 128 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 129 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 130 fpu_d0_arm64, // (ARM64_D0, 140) 131 fpu_d1_arm64, // (ARM64_D1, 141) 132 fpu_d2_arm64, // (ARM64_D2, 142) 133 fpu_d3_arm64, // (ARM64_D3, 143) 134 fpu_d4_arm64, // (ARM64_D4, 144) 135 fpu_d5_arm64, // (ARM64_D5, 145) 136 fpu_d6_arm64, // (ARM64_D6, 146) 137 fpu_d7_arm64, // (ARM64_D7, 147) 138 fpu_d8_arm64, // (ARM64_D8, 148) 139 fpu_d9_arm64, // (ARM64_D9, 149) 140 fpu_d10_arm64, // (ARM64_D10, 150) 141 fpu_d11_arm64, // (ARM64_D11, 151) 142 fpu_d12_arm64, // (ARM64_D12, 152) 143 fpu_d13_arm64, // (ARM64_D13, 153) 144 fpu_d14_arm64, // (ARM64_D14, 154) 145 fpu_d15_arm64, // (ARM64_D15, 155) 146 fpu_d16_arm64, // (ARM64_D16, 156) 147 fpu_d17_arm64, // (ARM64_D17, 157) 148 fpu_d18_arm64, // (ARM64_D18, 158) 149 fpu_d19_arm64, // (ARM64_D19, 159) 150 fpu_d20_arm64, // (ARM64_D20, 160) 151 fpu_d21_arm64, // (ARM64_D21, 161) 152 fpu_d22_arm64, // (ARM64_D22, 162) 153 fpu_d23_arm64, // (ARM64_D23, 163) 154 fpu_d24_arm64, // (ARM64_D24, 164) 155 fpu_d25_arm64, // (ARM64_D25, 165) 156 fpu_d26_arm64, // (ARM64_D26, 166) 157 fpu_d27_arm64, // (ARM64_D27, 167) 158 fpu_d28_arm64, // (ARM64_D28, 168) 159 fpu_d29_arm64, // (ARM64_D29, 169) 160 fpu_d30_arm64, // (ARM64_D30, 170) 161 fpu_d31_arm64, // (ARM64_D31, 171) 162 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 163 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 164 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 165 fpu_v0_arm64, // (ARM64_Q0, 180) 166 fpu_v1_arm64, // (ARM64_Q1, 181) 167 fpu_v2_arm64, // (ARM64_Q2, 182) 168 fpu_v3_arm64, // (ARM64_Q3, 183) 169 fpu_v4_arm64, // (ARM64_Q4, 184) 170 fpu_v5_arm64, // (ARM64_Q5, 185) 171 fpu_v6_arm64, // (ARM64_Q6, 186) 172 fpu_v7_arm64, // (ARM64_Q7, 187) 173 fpu_v8_arm64, // (ARM64_Q8, 188) 174 fpu_v9_arm64, // (ARM64_Q9, 189) 175 fpu_v10_arm64, // (ARM64_Q10, 190) 176 fpu_v11_arm64, // (ARM64_Q11, 191) 177 fpu_v12_arm64, // (ARM64_Q12, 192) 178 fpu_v13_arm64, // (ARM64_Q13, 193) 179 fpu_v14_arm64, // (ARM64_Q14, 194) 180 fpu_v15_arm64, // (ARM64_Q15, 195) 181 fpu_v16_arm64, // (ARM64_Q16, 196) 182 fpu_v17_arm64, // (ARM64_Q17, 197) 183 fpu_v18_arm64, // (ARM64_Q18, 198) 184 fpu_v19_arm64, // (ARM64_Q19, 199) 185 fpu_v20_arm64, // (ARM64_Q20, 200) 186 fpu_v21_arm64, // (ARM64_Q21, 201) 187 fpu_v22_arm64, // (ARM64_Q22, 202) 188 fpu_v23_arm64, // (ARM64_Q23, 203) 189 fpu_v24_arm64, // (ARM64_Q24, 204) 190 fpu_v25_arm64, // (ARM64_Q25, 205) 191 fpu_v26_arm64, // (ARM64_Q26, 206) 192 fpu_v27_arm64, // (ARM64_Q27, 207) 193 fpu_v28_arm64, // (ARM64_Q28, 208) 194 fpu_v29_arm64, // (ARM64_Q29, 209) 195 fpu_v30_arm64, // (ARM64_Q30, 210) 196 fpu_v31_arm64, // (ARM64_Q31, 211) 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, 200 fpu_fpsr_arm64 // ARM64_FPSR, 220) 201 }; 202 203 static const uint32_t g_code_view_to_lldb_registers_x86[] = { 204 LLDB_INVALID_REGNUM, // NONE 205 lldb_al_i386, // AL 206 lldb_cl_i386, // CL 207 lldb_dl_i386, // DL 208 lldb_bl_i386, // BL 209 lldb_ah_i386, // AH 210 lldb_ch_i386, // CH 211 lldb_dh_i386, // DH 212 lldb_bh_i386, // BH 213 lldb_ax_i386, // AX 214 lldb_cx_i386, // CX 215 lldb_dx_i386, // DX 216 lldb_bx_i386, // BX 217 lldb_sp_i386, // SP 218 lldb_bp_i386, // BP 219 lldb_si_i386, // SI 220 lldb_di_i386, // DI 221 lldb_eax_i386, // EAX 222 lldb_ecx_i386, // ECX 223 lldb_edx_i386, // EDX 224 lldb_ebx_i386, // EBX 225 lldb_esp_i386, // ESP 226 lldb_ebp_i386, // EBP 227 lldb_esi_i386, // ESI 228 lldb_edi_i386, // EDI 229 lldb_es_i386, // ES 230 lldb_cs_i386, // CS 231 lldb_ss_i386, // SS 232 lldb_ds_i386, // DS 233 lldb_fs_i386, // FS 234 lldb_gs_i386, // GS 235 LLDB_INVALID_REGNUM, // IP 236 LLDB_INVALID_REGNUM, // FLAGS 237 lldb_eip_i386, // EIP 238 lldb_eflags_i386, // EFLAGS 239 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 240 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 241 LLDB_INVALID_REGNUM, // TEMP 242 LLDB_INVALID_REGNUM, // TEMPH 243 LLDB_INVALID_REGNUM, // QUOTE 244 LLDB_INVALID_REGNUM, // PCDR3 245 LLDB_INVALID_REGNUM, // PCDR4 246 LLDB_INVALID_REGNUM, // PCDR5 247 LLDB_INVALID_REGNUM, // PCDR6 248 LLDB_INVALID_REGNUM, // PCDR7 249 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 250 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 251 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 252 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 253 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 254 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 255 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 256 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 257 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 258 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 259 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 260 LLDB_INVALID_REGNUM, // CR0 261 LLDB_INVALID_REGNUM, // CR1 262 LLDB_INVALID_REGNUM, // CR2 263 LLDB_INVALID_REGNUM, // CR3 264 LLDB_INVALID_REGNUM, // CR4 265 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 266 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 267 lldb_dr0_i386, // DR0 268 lldb_dr1_i386, // DR1 269 lldb_dr2_i386, // DR2 270 lldb_dr3_i386, // DR3 271 lldb_dr4_i386, // DR4 272 lldb_dr5_i386, // DR5 273 lldb_dr6_i386, // DR6 274 lldb_dr7_i386, // DR7 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, // GDTR 280 LLDB_INVALID_REGNUM, // GDTL 281 LLDB_INVALID_REGNUM, // IDTR 282 LLDB_INVALID_REGNUM, // IDTL 283 LLDB_INVALID_REGNUM, // LDTR 284 LLDB_INVALID_REGNUM, // TR 285 LLDB_INVALID_REGNUM, // PSEUDO1 286 LLDB_INVALID_REGNUM, // PSEUDO2 287 LLDB_INVALID_REGNUM, // PSEUDO3 288 LLDB_INVALID_REGNUM, // PSEUDO4 289 LLDB_INVALID_REGNUM, // PSEUDO5 290 LLDB_INVALID_REGNUM, // PSEUDO6 291 LLDB_INVALID_REGNUM, // PSEUDO7 292 LLDB_INVALID_REGNUM, // PSEUDO8 293 LLDB_INVALID_REGNUM, // PSEUDO9 294 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 295 lldb_st0_i386, // ST0 296 lldb_st1_i386, // ST1 297 lldb_st2_i386, // ST2 298 lldb_st3_i386, // ST3 299 lldb_st4_i386, // ST4 300 lldb_st5_i386, // ST5 301 lldb_st6_i386, // ST6 302 lldb_st7_i386, // ST7 303 LLDB_INVALID_REGNUM, // CTRL 304 LLDB_INVALID_REGNUM, // STAT 305 LLDB_INVALID_REGNUM, // TAG 306 LLDB_INVALID_REGNUM, // FPIP 307 LLDB_INVALID_REGNUM, // FPCS 308 LLDB_INVALID_REGNUM, // FPDO 309 LLDB_INVALID_REGNUM, // FPDS 310 LLDB_INVALID_REGNUM, // ISEM 311 LLDB_INVALID_REGNUM, // FPEIP 312 LLDB_INVALID_REGNUM, // FPEDO 313 lldb_mm0_i386, // MM0 314 lldb_mm1_i386, // MM1 315 lldb_mm2_i386, // MM2 316 lldb_mm3_i386, // MM3 317 lldb_mm4_i386, // MM4 318 lldb_mm5_i386, // MM5 319 lldb_mm6_i386, // MM6 320 lldb_mm7_i386, // MM7 321 lldb_xmm0_i386, // XMM0 322 lldb_xmm1_i386, // XMM1 323 lldb_xmm2_i386, // XMM2 324 lldb_xmm3_i386, // XMM3 325 lldb_xmm4_i386, // XMM4 326 lldb_xmm5_i386, // XMM5 327 lldb_xmm6_i386, // XMM6 328 lldb_xmm7_i386 // XMM7 329 }; 330 331 static const uint32_t g_code_view_to_lldb_registers_x86_64[] = { 332 LLDB_INVALID_REGNUM, // NONE 333 lldb_al_x86_64, // AL 334 lldb_cl_x86_64, // CL 335 lldb_dl_x86_64, // DL 336 lldb_bl_x86_64, // BL 337 lldb_ah_x86_64, // AH 338 lldb_ch_x86_64, // CH 339 lldb_dh_x86_64, // DH 340 lldb_bh_x86_64, // BH 341 lldb_ax_x86_64, // AX 342 lldb_cx_x86_64, // CX 343 lldb_dx_x86_64, // DX 344 lldb_bx_x86_64, // BX 345 lldb_sp_x86_64, // SP 346 lldb_bp_x86_64, // BP 347 lldb_si_x86_64, // SI 348 lldb_di_x86_64, // DI 349 lldb_eax_x86_64, // EAX 350 lldb_ecx_x86_64, // ECX 351 lldb_edx_x86_64, // EDX 352 lldb_ebx_x86_64, // EBX 353 lldb_esp_x86_64, // ESP 354 lldb_ebp_x86_64, // EBP 355 lldb_esi_x86_64, // ESI 356 lldb_edi_x86_64, // EDI 357 lldb_es_x86_64, // ES 358 lldb_cs_x86_64, // CS 359 lldb_ss_x86_64, // SS 360 lldb_ds_x86_64, // DS 361 lldb_fs_x86_64, // FS 362 lldb_gs_x86_64, // GS 363 LLDB_INVALID_REGNUM, // IP 364 LLDB_INVALID_REGNUM, // FLAGS 365 LLDB_INVALID_REGNUM, // EIP 366 LLDB_INVALID_REGNUM, // EFLAGS 367 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 368 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 369 LLDB_INVALID_REGNUM, // TEMP 370 LLDB_INVALID_REGNUM, // TEMPH 371 LLDB_INVALID_REGNUM, // QUOTE 372 LLDB_INVALID_REGNUM, // PCDR3 373 LLDB_INVALID_REGNUM, // PCDR4 374 LLDB_INVALID_REGNUM, // PCDR5 375 LLDB_INVALID_REGNUM, // PCDR6 376 LLDB_INVALID_REGNUM, // PCDR7 377 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 378 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 379 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 380 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 381 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 382 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 383 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 384 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 385 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 386 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 387 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 388 LLDB_INVALID_REGNUM, // CR0 389 LLDB_INVALID_REGNUM, // CR1 390 LLDB_INVALID_REGNUM, // CR2 391 LLDB_INVALID_REGNUM, // CR3 392 LLDB_INVALID_REGNUM, // CR4 393 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 394 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 395 lldb_dr0_x86_64, // DR0 396 lldb_dr1_x86_64, // DR1 397 lldb_dr2_x86_64, // DR2 398 lldb_dr3_x86_64, // DR3 399 lldb_dr4_x86_64, // DR4 400 lldb_dr5_x86_64, // DR5 401 lldb_dr6_x86_64, // DR6 402 lldb_dr7_x86_64, // DR7 403 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 404 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 405 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 406 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 407 LLDB_INVALID_REGNUM, // GDTR 408 LLDB_INVALID_REGNUM, // GDTL 409 LLDB_INVALID_REGNUM, // IDTR 410 LLDB_INVALID_REGNUM, // IDTL 411 LLDB_INVALID_REGNUM, // LDTR 412 LLDB_INVALID_REGNUM, // TR 413 LLDB_INVALID_REGNUM, // PSEUDO1 414 LLDB_INVALID_REGNUM, // PSEUDO2 415 LLDB_INVALID_REGNUM, // PSEUDO3 416 LLDB_INVALID_REGNUM, // PSEUDO4 417 LLDB_INVALID_REGNUM, // PSEUDO5 418 LLDB_INVALID_REGNUM, // PSEUDO6 419 LLDB_INVALID_REGNUM, // PSEUDO7 420 LLDB_INVALID_REGNUM, // PSEUDO8 421 LLDB_INVALID_REGNUM, // PSEUDO9 422 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 423 lldb_st0_x86_64, // ST0 424 lldb_st1_x86_64, // ST1 425 lldb_st2_x86_64, // ST2 426 lldb_st3_x86_64, // ST3 427 lldb_st4_x86_64, // ST4 428 lldb_st5_x86_64, // ST5 429 lldb_st6_x86_64, // ST6 430 lldb_st7_x86_64, // ST7 431 LLDB_INVALID_REGNUM, // CTRL 432 LLDB_INVALID_REGNUM, // STAT 433 LLDB_INVALID_REGNUM, // TAG 434 LLDB_INVALID_REGNUM, // FPIP 435 LLDB_INVALID_REGNUM, // FPCS 436 LLDB_INVALID_REGNUM, // FPDO 437 LLDB_INVALID_REGNUM, // FPDS 438 LLDB_INVALID_REGNUM, // ISEM 439 LLDB_INVALID_REGNUM, // FPEIP 440 LLDB_INVALID_REGNUM, // FPEDO 441 lldb_mm0_x86_64, // MM0 442 lldb_mm1_x86_64, // MM1 443 lldb_mm2_x86_64, // MM2 444 lldb_mm3_x86_64, // MM3 445 lldb_mm4_x86_64, // MM4 446 lldb_mm5_x86_64, // MM5 447 lldb_mm6_x86_64, // MM6 448 lldb_mm7_x86_64, // MM7 449 lldb_xmm0_x86_64, // XMM0 450 lldb_xmm1_x86_64, // XMM1 451 lldb_xmm2_x86_64, // XMM2 452 lldb_xmm3_x86_64, // XMM3 453 lldb_xmm4_x86_64, // XMM4 454 lldb_xmm5_x86_64, // XMM5 455 lldb_xmm6_x86_64, // XMM6 456 lldb_xmm7_x86_64, // XMM7 457 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 458 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 459 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 460 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 461 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 462 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 463 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 464 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 465 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 466 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 467 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 468 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 469 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 470 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 471 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 472 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 473 LLDB_INVALID_REGNUM, 474 lldb_mxcsr_x86_64, // MXCSR 475 LLDB_INVALID_REGNUM, // EDXEAX 476 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 477 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 478 LLDB_INVALID_REGNUM, 479 LLDB_INVALID_REGNUM, // EMM0L 480 LLDB_INVALID_REGNUM, // EMM1L 481 LLDB_INVALID_REGNUM, // EMM2L 482 LLDB_INVALID_REGNUM, // EMM3L 483 LLDB_INVALID_REGNUM, // EMM4L 484 LLDB_INVALID_REGNUM, // EMM5L 485 LLDB_INVALID_REGNUM, // EMM6L 486 LLDB_INVALID_REGNUM, // EMM7L 487 LLDB_INVALID_REGNUM, // EMM0H 488 LLDB_INVALID_REGNUM, // EMM1H 489 LLDB_INVALID_REGNUM, // EMM2H 490 LLDB_INVALID_REGNUM, // EMM3H 491 LLDB_INVALID_REGNUM, // EMM4H 492 LLDB_INVALID_REGNUM, // EMM5H 493 LLDB_INVALID_REGNUM, // EMM6H 494 LLDB_INVALID_REGNUM, // EMM7H 495 LLDB_INVALID_REGNUM, // MM00 496 LLDB_INVALID_REGNUM, // MM01 497 LLDB_INVALID_REGNUM, // MM10 498 LLDB_INVALID_REGNUM, // MM11 499 LLDB_INVALID_REGNUM, // MM20 500 LLDB_INVALID_REGNUM, // MM21 501 LLDB_INVALID_REGNUM, // MM30 502 LLDB_INVALID_REGNUM, // MM31 503 LLDB_INVALID_REGNUM, // MM40 504 LLDB_INVALID_REGNUM, // MM41 505 LLDB_INVALID_REGNUM, // MM50 506 LLDB_INVALID_REGNUM, // MM51 507 LLDB_INVALID_REGNUM, // MM60 508 LLDB_INVALID_REGNUM, // MM61 509 LLDB_INVALID_REGNUM, // MM70 510 LLDB_INVALID_REGNUM, // MM71 511 lldb_xmm8_x86_64, // XMM8 512 lldb_xmm9_x86_64, // XMM9 513 lldb_xmm10_x86_64, // XMM10 514 lldb_xmm11_x86_64, // XMM11 515 lldb_xmm12_x86_64, // XMM12 516 lldb_xmm13_x86_64, // XMM13 517 lldb_xmm14_x86_64, // XMM14 518 lldb_xmm15_x86_64, // XMM15 519 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 520 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 521 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 522 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 523 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 524 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 525 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 526 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 527 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 528 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 529 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 530 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 531 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 532 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 533 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 534 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 535 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 536 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 537 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 538 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 539 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 540 LLDB_INVALID_REGNUM, 541 lldb_sil_x86_64, // SIL 542 lldb_dil_x86_64, // DIL 543 lldb_bpl_x86_64, // BPL 544 lldb_spl_x86_64, // SPL 545 lldb_rax_x86_64, // RAX 546 lldb_rbx_x86_64, // RBX 547 lldb_rcx_x86_64, // RCX 548 lldb_rdx_x86_64, // RDX 549 lldb_rsi_x86_64, // RSI 550 lldb_rdi_x86_64, // RDI 551 lldb_rbp_x86_64, // RBP 552 lldb_rsp_x86_64, // RSP 553 lldb_r8_x86_64, // R8 554 lldb_r9_x86_64, // R9 555 lldb_r10_x86_64, // R10 556 lldb_r11_x86_64, // R11 557 lldb_r12_x86_64, // R12 558 lldb_r13_x86_64, // R13 559 lldb_r14_x86_64, // R14 560 lldb_r15_x86_64, // R15 561 lldb_r8l_x86_64, // R8B 562 lldb_r9l_x86_64, // R9B 563 lldb_r10l_x86_64, // R10B 564 lldb_r11l_x86_64, // R11B 565 lldb_r12l_x86_64, // R12B 566 lldb_r13l_x86_64, // R13B 567 lldb_r14l_x86_64, // R14B 568 lldb_r15l_x86_64, // R15B 569 lldb_r8w_x86_64, // R8W 570 lldb_r9w_x86_64, // R9W 571 lldb_r10w_x86_64, // R10W 572 lldb_r11w_x86_64, // R11W 573 lldb_r12w_x86_64, // R12W 574 lldb_r13w_x86_64, // R13W 575 lldb_r14w_x86_64, // R14W 576 lldb_r15w_x86_64, // R15W 577 lldb_r8d_x86_64, // R8D 578 lldb_r9d_x86_64, // R9D 579 lldb_r10d_x86_64, // R10D 580 lldb_r11d_x86_64, // R11D 581 lldb_r12d_x86_64, // R12D 582 lldb_r13d_x86_64, // R13D 583 lldb_r14d_x86_64, // R14D 584 lldb_r15d_x86_64, // R15D 585 lldb_ymm0_x86_64, // AMD64_YMM0 586 lldb_ymm1_x86_64, // AMD64_YMM1 587 lldb_ymm2_x86_64, // AMD64_YMM2 588 lldb_ymm3_x86_64, // AMD64_YMM3 589 lldb_ymm4_x86_64, // AMD64_YMM4 590 lldb_ymm5_x86_64, // AMD64_YMM5 591 lldb_ymm6_x86_64, // AMD64_YMM6 592 lldb_ymm7_x86_64, // AMD64_YMM7 593 lldb_ymm8_x86_64, // AMD64_YMM8 594 lldb_ymm9_x86_64, // AMD64_YMM9 595 lldb_ymm10_x86_64, // AMD64_YMM10 596 lldb_ymm11_x86_64, // AMD64_YMM11 597 lldb_ymm12_x86_64, // AMD64_YMM12 598 lldb_ymm13_x86_64, // AMD64_YMM13 599 lldb_ymm14_x86_64, // AMD64_YMM14 600 lldb_ymm15_x86_64, // AMD64_YMM15 601 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 602 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 603 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 604 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, 605 lldb_bnd0_x86_64, // BND0 606 lldb_bnd1_x86_64, // BND1 607 lldb_bnd2_x86_64 // BND2 608 }; 609 610 uint32_t lldb_private::npdb::GetLLDBRegisterNumber( 611 llvm::Triple::ArchType arch_type, llvm::codeview::RegisterId register_id) { 612 switch (arch_type) { 613 case llvm::Triple::aarch64: 614 if (static_cast<uint16_t>(register_id) < 615 sizeof(g_code_view_to_lldb_registers_arm64) / 616 sizeof(g_code_view_to_lldb_registers_arm64[0])) 617 return g_code_view_to_lldb_registers_arm64[static_cast<uint16_t>( 618 register_id)]; 619 620 return LLDB_INVALID_REGNUM; 621 case llvm::Triple::x86: 622 if (static_cast<uint16_t>(register_id) < 623 sizeof(g_code_view_to_lldb_registers_x86) / 624 sizeof(g_code_view_to_lldb_registers_x86[0])) 625 return g_code_view_to_lldb_registers_x86[static_cast<uint16_t>( 626 register_id)]; 627 628 switch (register_id) { 629 case llvm::codeview::RegisterId::MXCSR: 630 return lldb_mxcsr_i386; 631 case llvm::codeview::RegisterId::BND0: 632 return lldb_bnd0_i386; 633 case llvm::codeview::RegisterId::BND1: 634 return lldb_bnd1_i386; 635 case llvm::codeview::RegisterId::BND2: 636 return lldb_bnd2_i386; 637 default: 638 return LLDB_INVALID_REGNUM; 639 } 640 case llvm::Triple::x86_64: 641 if (static_cast<uint16_t>(register_id) < 642 sizeof(g_code_view_to_lldb_registers_x86_64) / 643 sizeof(g_code_view_to_lldb_registers_x86_64[0])) 644 return g_code_view_to_lldb_registers_x86_64[static_cast<uint16_t>( 645 register_id)]; 646 647 return LLDB_INVALID_REGNUM; 648 default: 649 return LLDB_INVALID_REGNUM; 650 } 651 } 652