Index: lldb/source/Plugins/Process/Utility/RegisterInfos_arm64.h =================================================================== --- lldb/source/Plugins/Process/Utility/RegisterInfos_arm64.h +++ lldb/source/Plugins/Process/Utility/RegisterInfos_arm64.h @@ -297,6 +297,36 @@ k_num_registers }; +static uint32_t g_x0_invalidates[] = {gpr_w0, LLDB_INVALID_REGNUM}; +static uint32_t g_x1_invalidates[] = {gpr_w1, LLDB_INVALID_REGNUM}; +static uint32_t g_x2_invalidates[] = {gpr_w2, LLDB_INVALID_REGNUM}; +static uint32_t g_x3_invalidates[] = {gpr_w3, LLDB_INVALID_REGNUM}; +static uint32_t g_x4_invalidates[] = {gpr_w4, LLDB_INVALID_REGNUM}; +static uint32_t g_x5_invalidates[] = {gpr_w5, LLDB_INVALID_REGNUM}; +static uint32_t g_x6_invalidates[] = {gpr_w6, LLDB_INVALID_REGNUM}; +static uint32_t g_x7_invalidates[] = {gpr_w7, LLDB_INVALID_REGNUM}; +static uint32_t g_x8_invalidates[] = {gpr_w8, LLDB_INVALID_REGNUM}; +static uint32_t g_x9_invalidates[] = {gpr_w9, LLDB_INVALID_REGNUM}; +static uint32_t g_x10_invalidates[] = {gpr_w10, LLDB_INVALID_REGNUM}; +static uint32_t g_x11_invalidates[] = {gpr_w11, LLDB_INVALID_REGNUM}; +static uint32_t g_x12_invalidates[] = {gpr_w12, LLDB_INVALID_REGNUM}; +static uint32_t g_x13_invalidates[] = {gpr_w13, LLDB_INVALID_REGNUM}; +static uint32_t g_x14_invalidates[] = {gpr_w14, LLDB_INVALID_REGNUM}; +static uint32_t g_x15_invalidates[] = {gpr_w15, LLDB_INVALID_REGNUM}; +static uint32_t g_x16_invalidates[] = {gpr_w16, LLDB_INVALID_REGNUM}; +static uint32_t g_x17_invalidates[] = {gpr_w17, LLDB_INVALID_REGNUM}; +static uint32_t g_x18_invalidates[] = {gpr_w18, LLDB_INVALID_REGNUM}; +static uint32_t g_x19_invalidates[] = {gpr_w19, LLDB_INVALID_REGNUM}; +static uint32_t g_x20_invalidates[] = {gpr_w20, LLDB_INVALID_REGNUM}; +static uint32_t g_x21_invalidates[] = {gpr_w21, LLDB_INVALID_REGNUM}; +static uint32_t g_x22_invalidates[] = {gpr_w22, LLDB_INVALID_REGNUM}; +static uint32_t g_x23_invalidates[] = {gpr_w23, LLDB_INVALID_REGNUM}; +static uint32_t g_x24_invalidates[] = {gpr_w24, LLDB_INVALID_REGNUM}; +static uint32_t g_x25_invalidates[] = {gpr_w25, LLDB_INVALID_REGNUM}; +static uint32_t g_x26_invalidates[] = {gpr_w26, LLDB_INVALID_REGNUM}; +static uint32_t g_x27_invalidates[] = {gpr_w27, LLDB_INVALID_REGNUM}; +static uint32_t g_x28_invalidates[] = {gpr_w28, LLDB_INVALID_REGNUM}; + static uint32_t g_contained_x0[] = {gpr_x0, LLDB_INVALID_REGNUM}; static uint32_t g_contained_x1[] = {gpr_x1, LLDB_INVALID_REGNUM}; static uint32_t g_contained_x2[] = {gpr_x2, LLDB_INVALID_REGNUM}; @@ -456,6 +486,38 @@ static uint32_t g_d30_invalidates[] = {fpu_v30, fpu_s30, LLDB_INVALID_REGNUM}; static uint32_t g_d31_invalidates[] = {fpu_v31, fpu_s31, LLDB_INVALID_REGNUM}; +static uint32_t g_v0_invalidates[] = {fpu_d0, fpu_s0, LLDB_INVALID_REGNUM}; +static uint32_t g_v1_invalidates[] = {fpu_d1, fpu_s1, LLDB_INVALID_REGNUM}; +static uint32_t g_v2_invalidates[] = {fpu_d2, fpu_s2, LLDB_INVALID_REGNUM}; +static uint32_t g_v3_invalidates[] = {fpu_d3, fpu_s3, LLDB_INVALID_REGNUM}; +static uint32_t g_v4_invalidates[] = {fpu_d4, fpu_s4, LLDB_INVALID_REGNUM}; +static uint32_t g_v5_invalidates[] = {fpu_d5, fpu_s5, LLDB_INVALID_REGNUM}; +static uint32_t g_v6_invalidates[] = {fpu_d6, fpu_s6, LLDB_INVALID_REGNUM}; +static uint32_t g_v7_invalidates[] = {fpu_d7, fpu_s7, LLDB_INVALID_REGNUM}; +static uint32_t g_v8_invalidates[] = {fpu_d8, fpu_s8, LLDB_INVALID_REGNUM}; +static uint32_t g_v9_invalidates[] = {fpu_d9, fpu_s9, LLDB_INVALID_REGNUM}; +static uint32_t g_v10_invalidates[] = {fpu_d10, fpu_s10, LLDB_INVALID_REGNUM}; +static uint32_t g_v11_invalidates[] = {fpu_d11, fpu_s11, LLDB_INVALID_REGNUM}; +static uint32_t g_v12_invalidates[] = {fpu_d12, fpu_s12, LLDB_INVALID_REGNUM}; +static uint32_t g_v13_invalidates[] = {fpu_d13, fpu_s13, LLDB_INVALID_REGNUM}; +static uint32_t g_v14_invalidates[] = {fpu_d14, fpu_s14, LLDB_INVALID_REGNUM}; +static uint32_t g_v15_invalidates[] = {fpu_d15, fpu_s15, LLDB_INVALID_REGNUM}; +static uint32_t g_v16_invalidates[] = {fpu_d16, fpu_s16, LLDB_INVALID_REGNUM}; +static uint32_t g_v17_invalidates[] = {fpu_d17, fpu_s17, LLDB_INVALID_REGNUM}; +static uint32_t g_v18_invalidates[] = {fpu_d18, fpu_s18, LLDB_INVALID_REGNUM}; +static uint32_t g_v19_invalidates[] = {fpu_d19, fpu_s19, LLDB_INVALID_REGNUM}; +static uint32_t g_v20_invalidates[] = {fpu_d20, fpu_s20, LLDB_INVALID_REGNUM}; +static uint32_t g_v21_invalidates[] = {fpu_d21, fpu_s21, LLDB_INVALID_REGNUM}; +static uint32_t g_v22_invalidates[] = {fpu_d22, fpu_s22, LLDB_INVALID_REGNUM}; +static uint32_t g_v23_invalidates[] = {fpu_d23, fpu_s23, LLDB_INVALID_REGNUM}; +static uint32_t g_v24_invalidates[] = {fpu_d24, fpu_s24, LLDB_INVALID_REGNUM}; +static uint32_t g_v25_invalidates[] = {fpu_d25, fpu_s25, LLDB_INVALID_REGNUM}; +static uint32_t g_v26_invalidates[] = {fpu_d26, fpu_s26, LLDB_INVALID_REGNUM}; +static uint32_t g_v27_invalidates[] = {fpu_d27, fpu_s27, LLDB_INVALID_REGNUM}; +static uint32_t g_v28_invalidates[] = {fpu_d28, fpu_s28, LLDB_INVALID_REGNUM}; +static uint32_t g_v29_invalidates[] = {fpu_d29, fpu_s29, LLDB_INVALID_REGNUM}; +static uint32_t g_v30_invalidates[] = {fpu_d30, fpu_s30, LLDB_INVALID_REGNUM}; +static uint32_t g_v31_invalidates[] = {fpu_d31, fpu_s31, LLDB_INVALID_REGNUM}; // Generates register kinds array for 64-bit general purpose registers #define GPR64_KIND(reg, generic_kind) \ { \ @@ -470,38 +532,29 @@ LLDB_INVALID_REGNUM, lldb_kind \ } -// Generates register kinds array for vector registers -#define VREG_KIND(reg) \ +// Generates register kinds array with dwarf, ehframe, generic and lldb kind +#define MISC_KIND_GENERIC(reg, type, generic_kind) \ { \ - LLDB_INVALID_REGNUM, arm64_dwarf::reg, LLDB_INVALID_REGNUM, \ - LLDB_INVALID_REGNUM, fpu_##reg \ + arm64_ehframe::reg, arm64_dwarf::reg, generic_kind, LLDB_INVALID_REGNUM, \ + type##_##reg \ } // Generates register kinds array for cpsr -#define CPSR_KIND(lldb_kind) \ - { \ - arm64_ehframe::cpsr, arm64_dwarf::cpsr, LLDB_REGNUM_GENERIC_FLAGS, \ - LLDB_INVALID_REGNUM, lldb_kind \ - } +#define MISC_CPSR_KIND(lldb_kind) \ + MISC_KIND_GENERIC(cpsr, gpr, LLDB_REGNUM_GENERIC_FLAGS) +#define CPSR_OFFSET_NAME(reg) GPR_OFFSET_NAME(reg) #define MISC_GPR_KIND(lldb_kind) CPSR_KIND(lldb_kind) #define MISC_FPU_KIND(lldb_kind) MISC_KIND(lldb_kind) #define MISC_EXC_KIND(lldb_kind) MISC_KIND(lldb_kind) +#define VREG_KIND(vreg) MISC_KIND_GENERIC(vreg, fpu, LLDB_INVALID_REGNUM) // Defines a 64-bit general purpose register -#define DEFINE_GPR64(reg, generic_kind) \ - { \ - #reg, nullptr, 8, GPR_OFFSET(gpr_##reg), lldb::eEncodingUint, \ - lldb::eFormatHex, GPR64_KIND(reg, generic_kind), nullptr, nullptr, \ - nullptr, 0 \ - } - -// Defines a 64-bit general purpose register -#define DEFINE_GPR64_ALT(reg, alt, generic_kind) \ +#define DEFINE_GPR64(reg, alt_name, generic_kind, invalidate_list) \ { \ - #reg, #alt, 8, GPR_OFFSET(gpr_##reg), lldb::eEncodingUint, \ - lldb::eFormatHex, GPR64_KIND(reg, generic_kind), nullptr, nullptr, \ - nullptr, 0 \ + #reg, alt_name, 8, GPR_OFFSET(gpr_##reg), lldb::eEncodingUint, \ + lldb::eFormatHex, GPR64_KIND(reg, generic_kind), nullptr, \ + invalidate_list, nullptr, 0 \ } // Defines a 32-bit general purpose pseudo register @@ -517,8 +570,8 @@ #define DEFINE_VREG(reg) \ { \ #reg, nullptr, 16, FPU_OFFSET(fpu_##reg - fpu_v0), lldb::eEncodingVector, \ - lldb::eFormatVectorOfUInt8, VREG_KIND(reg), nullptr, nullptr, nullptr, \ - 0 \ + lldb::eFormatVectorOfUInt8, VREG_KIND(reg), nullptr, \ + g_##reg##_invalidates, nullptr, 0 \ } // Defines S and D pseudo registers mapping over correspondig vector register @@ -537,45 +590,48 @@ nullptr, 0 \ } +#define STRINGIZE2(x) #x +#define STRINGIZE(x) STRINGIZE2(x) + static lldb_private::RegisterInfo g_register_infos_arm64_le[] = { // DEFINE_GPR64(name, GENERIC KIND) - DEFINE_GPR64(x0, LLDB_REGNUM_GENERIC_ARG1), - DEFINE_GPR64(x1, LLDB_REGNUM_GENERIC_ARG2), - DEFINE_GPR64(x2, LLDB_REGNUM_GENERIC_ARG3), - DEFINE_GPR64(x3, LLDB_REGNUM_GENERIC_ARG4), - DEFINE_GPR64(x4, LLDB_REGNUM_GENERIC_ARG5), - DEFINE_GPR64(x5, LLDB_REGNUM_GENERIC_ARG6), - DEFINE_GPR64(x6, LLDB_REGNUM_GENERIC_ARG7), - DEFINE_GPR64(x7, LLDB_REGNUM_GENERIC_ARG8), - DEFINE_GPR64(x8, LLDB_INVALID_REGNUM), - DEFINE_GPR64(x9, LLDB_INVALID_REGNUM), - DEFINE_GPR64(x10, LLDB_INVALID_REGNUM), - DEFINE_GPR64(x11, LLDB_INVALID_REGNUM), - DEFINE_GPR64(x12, LLDB_INVALID_REGNUM), - DEFINE_GPR64(x13, LLDB_INVALID_REGNUM), - DEFINE_GPR64(x14, LLDB_INVALID_REGNUM), - DEFINE_GPR64(x15, LLDB_INVALID_REGNUM), - DEFINE_GPR64(x16, LLDB_INVALID_REGNUM), - DEFINE_GPR64(x17, LLDB_INVALID_REGNUM), - DEFINE_GPR64(x18, LLDB_INVALID_REGNUM), - DEFINE_GPR64(x19, LLDB_INVALID_REGNUM), - DEFINE_GPR64(x20, LLDB_INVALID_REGNUM), - DEFINE_GPR64(x21, LLDB_INVALID_REGNUM), - DEFINE_GPR64(x22, LLDB_INVALID_REGNUM), - DEFINE_GPR64(x23, LLDB_INVALID_REGNUM), - DEFINE_GPR64(x24, LLDB_INVALID_REGNUM), - DEFINE_GPR64(x25, LLDB_INVALID_REGNUM), - DEFINE_GPR64(x26, LLDB_INVALID_REGNUM), - DEFINE_GPR64(x27, LLDB_INVALID_REGNUM), - DEFINE_GPR64(x28, LLDB_INVALID_REGNUM), + DEFINE_GPR64(x0, nullptr, LLDB_REGNUM_GENERIC_ARG1, g_x0_invalidates), + DEFINE_GPR64(x1, nullptr, LLDB_REGNUM_GENERIC_ARG2, g_x1_invalidates), + DEFINE_GPR64(x2, nullptr, LLDB_REGNUM_GENERIC_ARG3, g_x2_invalidates), + DEFINE_GPR64(x3, nullptr, LLDB_REGNUM_GENERIC_ARG4, g_x3_invalidates), + DEFINE_GPR64(x4, nullptr, LLDB_REGNUM_GENERIC_ARG5, g_x4_invalidates), + DEFINE_GPR64(x5, nullptr, LLDB_REGNUM_GENERIC_ARG6, g_x5_invalidates), + DEFINE_GPR64(x6, nullptr, LLDB_REGNUM_GENERIC_ARG7, g_x6_invalidates), + DEFINE_GPR64(x7, nullptr, LLDB_REGNUM_GENERIC_ARG8, g_x7_invalidates), + DEFINE_GPR64(x8, nullptr, LLDB_INVALID_REGNUM, g_x8_invalidates), + DEFINE_GPR64(x9, nullptr, LLDB_INVALID_REGNUM, g_x9_invalidates), + DEFINE_GPR64(x10, nullptr, LLDB_INVALID_REGNUM, g_x10_invalidates), + DEFINE_GPR64(x11, nullptr, LLDB_INVALID_REGNUM, g_x11_invalidates), + DEFINE_GPR64(x12, nullptr, LLDB_INVALID_REGNUM, g_x12_invalidates), + DEFINE_GPR64(x13, nullptr, LLDB_INVALID_REGNUM, g_x13_invalidates), + DEFINE_GPR64(x14, nullptr, LLDB_INVALID_REGNUM, g_x14_invalidates), + DEFINE_GPR64(x15, nullptr, LLDB_INVALID_REGNUM, g_x15_invalidates), + DEFINE_GPR64(x16, nullptr, LLDB_INVALID_REGNUM, g_x16_invalidates), + DEFINE_GPR64(x17, nullptr, LLDB_INVALID_REGNUM, g_x17_invalidates), + DEFINE_GPR64(x18, nullptr, LLDB_INVALID_REGNUM, g_x18_invalidates), + DEFINE_GPR64(x19, nullptr, LLDB_INVALID_REGNUM, g_x19_invalidates), + DEFINE_GPR64(x20, nullptr, LLDB_INVALID_REGNUM, g_x20_invalidates), + DEFINE_GPR64(x21, nullptr, LLDB_INVALID_REGNUM, g_x21_invalidates), + DEFINE_GPR64(x22, nullptr, LLDB_INVALID_REGNUM, g_x22_invalidates), + DEFINE_GPR64(x23, nullptr, LLDB_INVALID_REGNUM, g_x23_invalidates), + DEFINE_GPR64(x24, nullptr, LLDB_INVALID_REGNUM, g_x24_invalidates), + DEFINE_GPR64(x25, nullptr, LLDB_INVALID_REGNUM, g_x25_invalidates), + DEFINE_GPR64(x26, nullptr, LLDB_INVALID_REGNUM, g_x26_invalidates), + DEFINE_GPR64(x27, nullptr, LLDB_INVALID_REGNUM, g_x27_invalidates), + DEFINE_GPR64(x28, nullptr, LLDB_INVALID_REGNUM, g_x28_invalidates), // DEFINE_GPR64(name, GENERIC KIND) - DEFINE_GPR64_ALT(fp, x29, LLDB_REGNUM_GENERIC_FP), - DEFINE_GPR64_ALT(lr, x30, LLDB_REGNUM_GENERIC_RA), - DEFINE_GPR64_ALT(sp, x31, LLDB_REGNUM_GENERIC_SP), - DEFINE_GPR64(pc, LLDB_REGNUM_GENERIC_PC), + DEFINE_GPR64(fp, STRINGIZE(x29), LLDB_REGNUM_GENERIC_FP, nullptr), + DEFINE_GPR64(lr, STRINGIZE(x30), LLDB_REGNUM_GENERIC_RA, nullptr), + DEFINE_GPR64(sp, STRINGIZE(x31), LLDB_REGNUM_GENERIC_SP, nullptr), + DEFINE_GPR64(pc, nullptr, LLDB_REGNUM_GENERIC_PC, nullptr), // DEFINE_MISC_REGS(name, size, TYPE, lldb kind) - DEFINE_MISC_REGS(cpsr, 4, GPR, gpr_cpsr), + DEFINE_MISC_REGS(cpsr, 4, CPSR, gpr_cpsr), // DEFINE_GPR32(name, parent name) DEFINE_GPR32(w0, x0),