749 lines · cpp
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-exception6//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 16using namespace lldb_private;17 18static const uint32_t g_code_view_to_lldb_registers_arm64[] = {19 LLDB_INVALID_REGNUM, // NONE20 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 203static const uint32_t g_code_view_to_lldb_registers_x86[] = {204 LLDB_INVALID_REGNUM, // NONE205 lldb_al_i386, // AL206 lldb_cl_i386, // CL207 lldb_dl_i386, // DL208 lldb_bl_i386, // BL209 lldb_ah_i386, // AH210 lldb_ch_i386, // CH211 lldb_dh_i386, // DH212 lldb_bh_i386, // BH213 lldb_ax_i386, // AX214 lldb_cx_i386, // CX215 lldb_dx_i386, // DX216 lldb_bx_i386, // BX217 lldb_sp_i386, // SP218 lldb_bp_i386, // BP219 lldb_si_i386, // SI220 lldb_di_i386, // DI221 lldb_eax_i386, // EAX222 lldb_ecx_i386, // ECX223 lldb_edx_i386, // EDX224 lldb_ebx_i386, // EBX225 lldb_esp_i386, // ESP226 lldb_ebp_i386, // EBP227 lldb_esi_i386, // ESI228 lldb_edi_i386, // EDI229 lldb_es_i386, // ES230 lldb_cs_i386, // CS231 lldb_ss_i386, // SS232 lldb_ds_i386, // DS233 lldb_fs_i386, // FS234 lldb_gs_i386, // GS235 LLDB_INVALID_REGNUM, // IP236 LLDB_INVALID_REGNUM, // FLAGS237 lldb_eip_i386, // EIP238 lldb_eflags_i386, // EFLAGS239 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,240 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,241 LLDB_INVALID_REGNUM, // TEMP242 LLDB_INVALID_REGNUM, // TEMPH243 LLDB_INVALID_REGNUM, // QUOTE244 LLDB_INVALID_REGNUM, // PCDR3245 LLDB_INVALID_REGNUM, // PCDR4246 LLDB_INVALID_REGNUM, // PCDR5247 LLDB_INVALID_REGNUM, // PCDR6248 LLDB_INVALID_REGNUM, // PCDR7249 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, // CR0261 LLDB_INVALID_REGNUM, // CR1262 LLDB_INVALID_REGNUM, // CR2263 LLDB_INVALID_REGNUM, // CR3264 LLDB_INVALID_REGNUM, // CR4265 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,266 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,267 lldb_dr0_i386, // DR0268 lldb_dr1_i386, // DR1269 lldb_dr2_i386, // DR2270 lldb_dr3_i386, // DR3271 lldb_dr4_i386, // DR4272 lldb_dr5_i386, // DR5273 lldb_dr6_i386, // DR6274 lldb_dr7_i386, // DR7275 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, // GDTR280 LLDB_INVALID_REGNUM, // GDTL281 LLDB_INVALID_REGNUM, // IDTR282 LLDB_INVALID_REGNUM, // IDTL283 LLDB_INVALID_REGNUM, // LDTR284 LLDB_INVALID_REGNUM, // TR285 LLDB_INVALID_REGNUM, // PSEUDO1286 LLDB_INVALID_REGNUM, // PSEUDO2287 LLDB_INVALID_REGNUM, // PSEUDO3288 LLDB_INVALID_REGNUM, // PSEUDO4289 LLDB_INVALID_REGNUM, // PSEUDO5290 LLDB_INVALID_REGNUM, // PSEUDO6291 LLDB_INVALID_REGNUM, // PSEUDO7292 LLDB_INVALID_REGNUM, // PSEUDO8293 LLDB_INVALID_REGNUM, // PSEUDO9294 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,295 lldb_st0_i386, // ST0296 lldb_st1_i386, // ST1297 lldb_st2_i386, // ST2298 lldb_st3_i386, // ST3299 lldb_st4_i386, // ST4300 lldb_st5_i386, // ST5301 lldb_st6_i386, // ST6302 lldb_st7_i386, // ST7303 LLDB_INVALID_REGNUM, // CTRL304 LLDB_INVALID_REGNUM, // STAT305 LLDB_INVALID_REGNUM, // TAG306 LLDB_INVALID_REGNUM, // FPIP307 LLDB_INVALID_REGNUM, // FPCS308 LLDB_INVALID_REGNUM, // FPDO309 LLDB_INVALID_REGNUM, // FPDS310 LLDB_INVALID_REGNUM, // ISEM311 LLDB_INVALID_REGNUM, // FPEIP312 LLDB_INVALID_REGNUM, // FPEDO313 lldb_mm0_i386, // MM0314 lldb_mm1_i386, // MM1315 lldb_mm2_i386, // MM2316 lldb_mm3_i386, // MM3317 lldb_mm4_i386, // MM4318 lldb_mm5_i386, // MM5319 lldb_mm6_i386, // MM6320 lldb_mm7_i386, // MM7321 lldb_xmm0_i386, // XMM0322 lldb_xmm1_i386, // XMM1323 lldb_xmm2_i386, // XMM2324 lldb_xmm3_i386, // XMM3325 lldb_xmm4_i386, // XMM4326 lldb_xmm5_i386, // XMM5327 lldb_xmm6_i386, // XMM6328 lldb_xmm7_i386 // XMM7329};330 331static const uint32_t g_code_view_to_lldb_registers_x86_64[] = {332 LLDB_INVALID_REGNUM, // NONE333 lldb_al_x86_64, // AL334 lldb_cl_x86_64, // CL335 lldb_dl_x86_64, // DL336 lldb_bl_x86_64, // BL337 lldb_ah_x86_64, // AH338 lldb_ch_x86_64, // CH339 lldb_dh_x86_64, // DH340 lldb_bh_x86_64, // BH341 lldb_ax_x86_64, // AX342 lldb_cx_x86_64, // CX343 lldb_dx_x86_64, // DX344 lldb_bx_x86_64, // BX345 lldb_sp_x86_64, // SP346 lldb_bp_x86_64, // BP347 lldb_si_x86_64, // SI348 lldb_di_x86_64, // DI349 lldb_eax_x86_64, // EAX350 lldb_ecx_x86_64, // ECX351 lldb_edx_x86_64, // EDX352 lldb_ebx_x86_64, // EBX353 lldb_esp_x86_64, // ESP354 lldb_ebp_x86_64, // EBP355 lldb_esi_x86_64, // ESI356 lldb_edi_x86_64, // EDI357 lldb_es_x86_64, // ES358 lldb_cs_x86_64, // CS359 lldb_ss_x86_64, // SS360 lldb_ds_x86_64, // DS361 lldb_fs_x86_64, // FS362 lldb_gs_x86_64, // GS363 LLDB_INVALID_REGNUM, // IP364 LLDB_INVALID_REGNUM, // FLAGS365 LLDB_INVALID_REGNUM, // EIP366 LLDB_INVALID_REGNUM, // EFLAGS367 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,368 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,369 LLDB_INVALID_REGNUM, // TEMP370 LLDB_INVALID_REGNUM, // TEMPH371 LLDB_INVALID_REGNUM, // QUOTE372 LLDB_INVALID_REGNUM, // PCDR3373 LLDB_INVALID_REGNUM, // PCDR4374 LLDB_INVALID_REGNUM, // PCDR5375 LLDB_INVALID_REGNUM, // PCDR6376 LLDB_INVALID_REGNUM, // PCDR7377 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, // CR0389 LLDB_INVALID_REGNUM, // CR1390 LLDB_INVALID_REGNUM, // CR2391 LLDB_INVALID_REGNUM, // CR3392 LLDB_INVALID_REGNUM, // CR4393 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,394 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,395 lldb_dr0_x86_64, // DR0396 lldb_dr1_x86_64, // DR1397 lldb_dr2_x86_64, // DR2398 lldb_dr3_x86_64, // DR3399 lldb_dr4_x86_64, // DR4400 lldb_dr5_x86_64, // DR5401 lldb_dr6_x86_64, // DR6402 lldb_dr7_x86_64, // DR7403 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, // GDTR408 LLDB_INVALID_REGNUM, // GDTL409 LLDB_INVALID_REGNUM, // IDTR410 LLDB_INVALID_REGNUM, // IDTL411 LLDB_INVALID_REGNUM, // LDTR412 LLDB_INVALID_REGNUM, // TR413 LLDB_INVALID_REGNUM, // PSEUDO1414 LLDB_INVALID_REGNUM, // PSEUDO2415 LLDB_INVALID_REGNUM, // PSEUDO3416 LLDB_INVALID_REGNUM, // PSEUDO4417 LLDB_INVALID_REGNUM, // PSEUDO5418 LLDB_INVALID_REGNUM, // PSEUDO6419 LLDB_INVALID_REGNUM, // PSEUDO7420 LLDB_INVALID_REGNUM, // PSEUDO8421 LLDB_INVALID_REGNUM, // PSEUDO9422 LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM, LLDB_INVALID_REGNUM,423 lldb_st0_x86_64, // ST0424 lldb_st1_x86_64, // ST1425 lldb_st2_x86_64, // ST2426 lldb_st3_x86_64, // ST3427 lldb_st4_x86_64, // ST4428 lldb_st5_x86_64, // ST5429 lldb_st6_x86_64, // ST6430 lldb_st7_x86_64, // ST7431 LLDB_INVALID_REGNUM, // CTRL432 LLDB_INVALID_REGNUM, // STAT433 LLDB_INVALID_REGNUM, // TAG434 LLDB_INVALID_REGNUM, // FPIP435 LLDB_INVALID_REGNUM, // FPCS436 LLDB_INVALID_REGNUM, // FPDO437 LLDB_INVALID_REGNUM, // FPDS438 LLDB_INVALID_REGNUM, // ISEM439 LLDB_INVALID_REGNUM, // FPEIP440 LLDB_INVALID_REGNUM, // FPEDO441 lldb_mm0_x86_64, // MM0442 lldb_mm1_x86_64, // MM1443 lldb_mm2_x86_64, // MM2444 lldb_mm3_x86_64, // MM3445 lldb_mm4_x86_64, // MM4446 lldb_mm5_x86_64, // MM5447 lldb_mm6_x86_64, // MM6448 lldb_mm7_x86_64, // MM7449 lldb_xmm0_x86_64, // XMM0450 lldb_xmm1_x86_64, // XMM1451 lldb_xmm2_x86_64, // XMM2452 lldb_xmm3_x86_64, // XMM3453 lldb_xmm4_x86_64, // XMM4454 lldb_xmm5_x86_64, // XMM5455 lldb_xmm6_x86_64, // XMM6456 lldb_xmm7_x86_64, // XMM7457 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, // MXCSR475 LLDB_INVALID_REGNUM, // EDXEAX476 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, // EMM0L480 LLDB_INVALID_REGNUM, // EMM1L481 LLDB_INVALID_REGNUM, // EMM2L482 LLDB_INVALID_REGNUM, // EMM3L483 LLDB_INVALID_REGNUM, // EMM4L484 LLDB_INVALID_REGNUM, // EMM5L485 LLDB_INVALID_REGNUM, // EMM6L486 LLDB_INVALID_REGNUM, // EMM7L487 LLDB_INVALID_REGNUM, // EMM0H488 LLDB_INVALID_REGNUM, // EMM1H489 LLDB_INVALID_REGNUM, // EMM2H490 LLDB_INVALID_REGNUM, // EMM3H491 LLDB_INVALID_REGNUM, // EMM4H492 LLDB_INVALID_REGNUM, // EMM5H493 LLDB_INVALID_REGNUM, // EMM6H494 LLDB_INVALID_REGNUM, // EMM7H495 LLDB_INVALID_REGNUM, // MM00496 LLDB_INVALID_REGNUM, // MM01497 LLDB_INVALID_REGNUM, // MM10498 LLDB_INVALID_REGNUM, // MM11499 LLDB_INVALID_REGNUM, // MM20500 LLDB_INVALID_REGNUM, // MM21501 LLDB_INVALID_REGNUM, // MM30502 LLDB_INVALID_REGNUM, // MM31503 LLDB_INVALID_REGNUM, // MM40504 LLDB_INVALID_REGNUM, // MM41505 LLDB_INVALID_REGNUM, // MM50506 LLDB_INVALID_REGNUM, // MM51507 LLDB_INVALID_REGNUM, // MM60508 LLDB_INVALID_REGNUM, // MM61509 LLDB_INVALID_REGNUM, // MM70510 LLDB_INVALID_REGNUM, // MM71511 lldb_xmm8_x86_64, // XMM8512 lldb_xmm9_x86_64, // XMM9513 lldb_xmm10_x86_64, // XMM10514 lldb_xmm11_x86_64, // XMM11515 lldb_xmm12_x86_64, // XMM12516 lldb_xmm13_x86_64, // XMM13517 lldb_xmm14_x86_64, // XMM14518 lldb_xmm15_x86_64, // XMM15519 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, // SIL542 lldb_dil_x86_64, // DIL543 lldb_bpl_x86_64, // BPL544 lldb_spl_x86_64, // SPL545 lldb_rax_x86_64, // RAX546 lldb_rbx_x86_64, // RBX547 lldb_rcx_x86_64, // RCX548 lldb_rdx_x86_64, // RDX549 lldb_rsi_x86_64, // RSI550 lldb_rdi_x86_64, // RDI551 lldb_rbp_x86_64, // RBP552 lldb_rsp_x86_64, // RSP553 lldb_r8_x86_64, // R8554 lldb_r9_x86_64, // R9555 lldb_r10_x86_64, // R10556 lldb_r11_x86_64, // R11557 lldb_r12_x86_64, // R12558 lldb_r13_x86_64, // R13559 lldb_r14_x86_64, // R14560 lldb_r15_x86_64, // R15561 lldb_r8l_x86_64, // R8B562 lldb_r9l_x86_64, // R9B563 lldb_r10l_x86_64, // R10B564 lldb_r11l_x86_64, // R11B565 lldb_r12l_x86_64, // R12B566 lldb_r13l_x86_64, // R13B567 lldb_r14l_x86_64, // R14B568 lldb_r15l_x86_64, // R15B569 lldb_r8w_x86_64, // R8W570 lldb_r9w_x86_64, // R9W571 lldb_r10w_x86_64, // R10W572 lldb_r11w_x86_64, // R11W573 lldb_r12w_x86_64, // R12W574 lldb_r13w_x86_64, // R13W575 lldb_r14w_x86_64, // R14W576 lldb_r15w_x86_64, // R15W577 lldb_r8d_x86_64, // R8D578 lldb_r9d_x86_64, // R9D579 lldb_r10d_x86_64, // R10D580 lldb_r11d_x86_64, // R11D581 lldb_r12d_x86_64, // R12D582 lldb_r13d_x86_64, // R13D583 lldb_r14d_x86_64, // R14D584 lldb_r15d_x86_64, // R15D585 lldb_ymm0_x86_64, // AMD64_YMM0586 lldb_ymm1_x86_64, // AMD64_YMM1587 lldb_ymm2_x86_64, // AMD64_YMM2588 lldb_ymm3_x86_64, // AMD64_YMM3589 lldb_ymm4_x86_64, // AMD64_YMM4590 lldb_ymm5_x86_64, // AMD64_YMM5591 lldb_ymm6_x86_64, // AMD64_YMM6592 lldb_ymm7_x86_64, // AMD64_YMM7593 lldb_ymm8_x86_64, // AMD64_YMM8594 lldb_ymm9_x86_64, // AMD64_YMM9595 lldb_ymm10_x86_64, // AMD64_YMM10596 lldb_ymm11_x86_64, // AMD64_YMM11597 lldb_ymm12_x86_64, // AMD64_YMM12598 lldb_ymm13_x86_64, // AMD64_YMM13599 lldb_ymm14_x86_64, // AMD64_YMM14600 lldb_ymm15_x86_64, // AMD64_YMM15601 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, // BND0606 lldb_bnd1_x86_64, // BND1607 lldb_bnd2_x86_64 // BND2608};609 610uint32_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 653uint32_t654lldb_private::npdb::GetRegisterSize(llvm::codeview::RegisterId register_id) {655 switch(register_id) {656 case llvm::codeview::RegisterId::AL:657 case llvm::codeview::RegisterId::BL:658 case llvm::codeview::RegisterId::CL:659 case llvm::codeview::RegisterId::DL:660 case llvm::codeview::RegisterId::AH:661 case llvm::codeview::RegisterId::BH:662 case llvm::codeview::RegisterId::CH:663 case llvm::codeview::RegisterId::DH:664 case llvm::codeview::RegisterId::SIL:665 case llvm::codeview::RegisterId::DIL:666 case llvm::codeview::RegisterId::BPL:667 case llvm::codeview::RegisterId::SPL:668 case llvm::codeview::RegisterId::R8B:669 case llvm::codeview::RegisterId::R9B:670 case llvm::codeview::RegisterId::R10B:671 case llvm::codeview::RegisterId::R11B:672 case llvm::codeview::RegisterId::R12B:673 case llvm::codeview::RegisterId::R13B:674 case llvm::codeview::RegisterId::R14B:675 case llvm::codeview::RegisterId::R15B:676 return 1;677 case llvm::codeview::RegisterId::AX:678 case llvm::codeview::RegisterId::BX:679 case llvm::codeview::RegisterId::CX:680 case llvm::codeview::RegisterId::DX:681 case llvm::codeview::RegisterId::SP:682 case llvm::codeview::RegisterId::BP:683 case llvm::codeview::RegisterId::SI:684 case llvm::codeview::RegisterId::DI:685 case llvm::codeview::RegisterId::R8W:686 case llvm::codeview::RegisterId::R9W:687 case llvm::codeview::RegisterId::R10W:688 case llvm::codeview::RegisterId::R11W:689 case llvm::codeview::RegisterId::R12W:690 case llvm::codeview::RegisterId::R13W:691 case llvm::codeview::RegisterId::R14W:692 case llvm::codeview::RegisterId::R15W:693 return 2;694 case llvm::codeview::RegisterId::EAX:695 case llvm::codeview::RegisterId::EBX:696 case llvm::codeview::RegisterId::ECX:697 case llvm::codeview::RegisterId::EDX:698 case llvm::codeview::RegisterId::ESP:699 case llvm::codeview::RegisterId::EBP:700 case llvm::codeview::RegisterId::ESI:701 case llvm::codeview::RegisterId::EDI:702 case llvm::codeview::RegisterId::R8D:703 case llvm::codeview::RegisterId::R9D:704 case llvm::codeview::RegisterId::R10D:705 case llvm::codeview::RegisterId::R11D:706 case llvm::codeview::RegisterId::R12D:707 case llvm::codeview::RegisterId::R13D:708 case llvm::codeview::RegisterId::R14D:709 case llvm::codeview::RegisterId::R15D:710 return 4;711 case llvm::codeview::RegisterId::RAX:712 case llvm::codeview::RegisterId::RBX:713 case llvm::codeview::RegisterId::RCX:714 case llvm::codeview::RegisterId::RDX:715 case llvm::codeview::RegisterId::RSI:716 case llvm::codeview::RegisterId::RDI:717 case llvm::codeview::RegisterId::RBP:718 case llvm::codeview::RegisterId::RSP:719 case llvm::codeview::RegisterId::R8:720 case llvm::codeview::RegisterId::R9:721 case llvm::codeview::RegisterId::R10:722 case llvm::codeview::RegisterId::R11:723 case llvm::codeview::RegisterId::R12:724 case llvm::codeview::RegisterId::R13:725 case llvm::codeview::RegisterId::R14:726 case llvm::codeview::RegisterId::R15:727 return 8;728 case llvm::codeview::RegisterId::XMM0:729 case llvm::codeview::RegisterId::XMM1:730 case llvm::codeview::RegisterId::XMM2:731 case llvm::codeview::RegisterId::XMM3:732 case llvm::codeview::RegisterId::XMM4:733 case llvm::codeview::RegisterId::XMM5:734 case llvm::codeview::RegisterId::XMM6:735 case llvm::codeview::RegisterId::XMM7:736 case llvm::codeview::RegisterId::XMM8:737 case llvm::codeview::RegisterId::XMM9:738 case llvm::codeview::RegisterId::XMM10:739 case llvm::codeview::RegisterId::XMM11:740 case llvm::codeview::RegisterId::XMM12:741 case llvm::codeview::RegisterId::XMM13:742 case llvm::codeview::RegisterId::XMM14:743 case llvm::codeview::RegisterId::XMM15:744 return 16;745 default:746 return 0;747 }748}749