| // Copyright 2019 The Fuchsia Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "src/developer/debug/ipc/register_desc.h" | |
| #include <gtest/gtest.h> | |
| #include "src/developer/debug/ipc/protocol.h" | |
| namespace debug_ipc { | |
| TEST(RegisterDesc, DWARFToRegisterInfo_Arm) { | |
| EXPECT_EQ(debug_ipc::RegisterID::kARMv8_x0, DWARFToRegisterInfo(Arch::kArm64, 0)->id); | |
| EXPECT_EQ(debug_ipc::RegisterID::kARMv8_x29, DWARFToRegisterInfo(Arch::kArm64, 29)->id); | |
| EXPECT_EQ(debug_ipc::RegisterID::kARMv8_lr, DWARFToRegisterInfo(Arch::kArm64, 30)->id); | |
| EXPECT_EQ(debug_ipc::RegisterID::kARMv8_sp, DWARFToRegisterInfo(Arch::kArm64, 31)->id); | |
| // DWARF ID 32 is "reserved". | |
| EXPECT_FALSE(DWARFToRegisterInfo(Arch::kArm64, 32)); | |
| } | |
| TEST(RegisterDesc, DWARFToRegisterInfo_x64) { | |
| // General registers. | |
| EXPECT_EQ(debug_ipc::RegisterID::kX64_rax, DWARFToRegisterInfo(Arch::kX64, 0)->id); | |
| EXPECT_EQ(debug_ipc::RegisterID::kX64_rsp, DWARFToRegisterInfo(Arch::kX64, 7)->id); | |
| EXPECT_EQ(debug_ipc::RegisterID::kX64_r8, DWARFToRegisterInfo(Arch::kX64, 8)->id); | |
| EXPECT_EQ(debug_ipc::RegisterID::kX64_rflags, DWARFToRegisterInfo(Arch::kX64, 49)->id); | |
| // xmm registers. | |
| EXPECT_EQ(debug_ipc::RegisterID::kX64_xmm0, DWARFToRegisterInfo(Arch::kX64, 17)->id); | |
| EXPECT_EQ(debug_ipc::RegisterID::kX64_xmm15, DWARFToRegisterInfo(Arch::kX64, 32)->id); | |
| EXPECT_EQ(debug_ipc::RegisterID::kX64_xmm16, DWARFToRegisterInfo(Arch::kX64, 67)->id); | |
| EXPECT_EQ(debug_ipc::RegisterID::kX64_xmm31, DWARFToRegisterInfo(Arch::kX64, 82)->id); | |
| } | |
| TEST(RegisterIDToCategory, Border) { | |
| auto IDToCat = RegisterIDToCategory; | |
| EXPECT_EQ(IDToCat(RegisterID::kUnknown), RegisterCategory::kNone); | |
| EXPECT_EQ(IDToCat(static_cast<RegisterID>(kARMv8GeneralBegin - 1)), RegisterCategory::kNone); | |
| EXPECT_EQ(IDToCat(static_cast<RegisterID>(kX64DebugEnd + 1)), RegisterCategory::kNone); | |
| } | |
| TEST(RegisterIDToCategory, ARMv8) { | |
| auto IDToCat = RegisterIDToCategory; | |
| // General. | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x0), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x1), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x2), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x3), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x4), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x5), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x6), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x7), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x8), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x9), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x10), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x11), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x12), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x13), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x14), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x15), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x16), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x17), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x18), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x19), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x20), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x21), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x22), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x23), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x24), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x25), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x26), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x27), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x28), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x29), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_x30), RegisterCategory::kGeneral); // alias for LR | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_lr), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_sp), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_pc), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_cpsr), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_w0), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_w29), RegisterCategory::kGeneral); | |
| // Vector. | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_fpcr), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_fpsr), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v0), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v1), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v2), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v3), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v4), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v5), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v6), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v7), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v8), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v9), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v10), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v11), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v12), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v13), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v14), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v15), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v16), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v17), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v18), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v19), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v20), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v21), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v22), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v23), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v24), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v25), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v26), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v27), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v28), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v29), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v30), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_v31), RegisterCategory::kVector); | |
| // Debug. | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_id_aa64dfr0_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_mdscr_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbcr0_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbcr1_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbcr2_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbcr3_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbcr4_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbcr5_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbcr6_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbcr7_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbcr8_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbcr9_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbcr10_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbcr11_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbcr12_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbcr13_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbcr14_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbcr15_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbvr0_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbvr1_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbvr2_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbvr3_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbvr4_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbvr5_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbvr6_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbvr7_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbvr8_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbvr9_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbvr10_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbvr11_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbvr12_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbvr13_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbvr14_el1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kARMv8_dbgbvr15_el1), RegisterCategory::kDebug); | |
| } | |
| TEST(RegisterIDToCategory, x64) { | |
| auto IDToCat = RegisterIDToCategory; | |
| // General. | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_rax), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_ah), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_al), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_eax), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_ax), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_rbx), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_rcx), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_rdx), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_rsi), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_rdi), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_rbp), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_rsp), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_r8), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_r9), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_r10), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_r11), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_r12), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_r13), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_r14), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_r15), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_rip), RegisterCategory::kGeneral); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_rflags), RegisterCategory::kGeneral); | |
| // Floating Point. | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_fcw), RegisterCategory::kFloatingPoint); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_fsw), RegisterCategory::kFloatingPoint); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_ftw), RegisterCategory::kFloatingPoint); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_fop), RegisterCategory::kFloatingPoint); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_fip), RegisterCategory::kFloatingPoint); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_fdp), RegisterCategory::kFloatingPoint); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_st0), RegisterCategory::kFloatingPoint); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_st1), RegisterCategory::kFloatingPoint); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_st2), RegisterCategory::kFloatingPoint); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_st3), RegisterCategory::kFloatingPoint); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_st4), RegisterCategory::kFloatingPoint); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_st5), RegisterCategory::kFloatingPoint); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_st6), RegisterCategory::kFloatingPoint); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_st7), RegisterCategory::kFloatingPoint); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_mm0), RegisterCategory::kFloatingPoint); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_mm7), RegisterCategory::kFloatingPoint); | |
| // Vector. | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_mxcsr), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_xmm0), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_xmm31), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_ymm0), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_ymm31), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_zmm0), RegisterCategory::kVector); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_zmm31), RegisterCategory::kVector); | |
| // Debug. | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_dr0), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_dr1), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_dr2), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_dr3), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_dr6), RegisterCategory::kDebug); | |
| EXPECT_EQ(IDToCat(RegisterID::kX64_dr7), RegisterCategory::kDebug); | |
| } | |
| TEST(RegisterIDToString, Registers) { | |
| EXPECT_STREQ("x0", RegisterIDToString(RegisterID::kARMv8_x0)); | |
| EXPECT_STREQ("x1", RegisterIDToString(RegisterID::kARMv8_x1)); | |
| EXPECT_STREQ("x2", RegisterIDToString(RegisterID::kARMv8_x2)); | |
| EXPECT_STREQ("x3", RegisterIDToString(RegisterID::kARMv8_x3)); | |
| EXPECT_STREQ("x4", RegisterIDToString(RegisterID::kARMv8_x4)); | |
| EXPECT_STREQ("x5", RegisterIDToString(RegisterID::kARMv8_x5)); | |
| EXPECT_STREQ("x6", RegisterIDToString(RegisterID::kARMv8_x6)); | |
| EXPECT_STREQ("x7", RegisterIDToString(RegisterID::kARMv8_x7)); | |
| EXPECT_STREQ("x8", RegisterIDToString(RegisterID::kARMv8_x8)); | |
| EXPECT_STREQ("x9", RegisterIDToString(RegisterID::kARMv8_x9)); | |
| EXPECT_STREQ("x10", RegisterIDToString(RegisterID::kARMv8_x10)); | |
| EXPECT_STREQ("x11", RegisterIDToString(RegisterID::kARMv8_x11)); | |
| EXPECT_STREQ("x12", RegisterIDToString(RegisterID::kARMv8_x12)); | |
| EXPECT_STREQ("x13", RegisterIDToString(RegisterID::kARMv8_x13)); | |
| EXPECT_STREQ("x14", RegisterIDToString(RegisterID::kARMv8_x14)); | |
| EXPECT_STREQ("x15", RegisterIDToString(RegisterID::kARMv8_x15)); | |
| EXPECT_STREQ("x16", RegisterIDToString(RegisterID::kARMv8_x16)); | |
| EXPECT_STREQ("x17", RegisterIDToString(RegisterID::kARMv8_x17)); | |
| EXPECT_STREQ("x18", RegisterIDToString(RegisterID::kARMv8_x18)); | |
| EXPECT_STREQ("x19", RegisterIDToString(RegisterID::kARMv8_x19)); | |
| EXPECT_STREQ("x20", RegisterIDToString(RegisterID::kARMv8_x20)); | |
| EXPECT_STREQ("x21", RegisterIDToString(RegisterID::kARMv8_x21)); | |
| EXPECT_STREQ("x22", RegisterIDToString(RegisterID::kARMv8_x22)); | |
| EXPECT_STREQ("x23", RegisterIDToString(RegisterID::kARMv8_x23)); | |
| EXPECT_STREQ("x24", RegisterIDToString(RegisterID::kARMv8_x24)); | |
| EXPECT_STREQ("x25", RegisterIDToString(RegisterID::kARMv8_x25)); | |
| EXPECT_STREQ("x26", RegisterIDToString(RegisterID::kARMv8_x26)); | |
| EXPECT_STREQ("x27", RegisterIDToString(RegisterID::kARMv8_x27)); | |
| EXPECT_STREQ("x28", RegisterIDToString(RegisterID::kARMv8_x28)); | |
| EXPECT_STREQ("x29", RegisterIDToString(RegisterID::kARMv8_x29)); | |
| EXPECT_STREQ("lr", RegisterIDToString(RegisterID::kARMv8_lr)); | |
| EXPECT_STREQ("sp", RegisterIDToString(RegisterID::kARMv8_sp)); | |
| EXPECT_STREQ("pc", RegisterIDToString(RegisterID::kARMv8_pc)); | |
| EXPECT_STREQ("cpsr", RegisterIDToString(RegisterID::kARMv8_cpsr)); | |
| EXPECT_STREQ("fpcr", RegisterIDToString(RegisterID::kARMv8_fpcr)); | |
| EXPECT_STREQ("fpsr", RegisterIDToString(RegisterID::kARMv8_fpsr)); | |
| EXPECT_STREQ("v0", RegisterIDToString(RegisterID::kARMv8_v0)); | |
| EXPECT_STREQ("v1", RegisterIDToString(RegisterID::kARMv8_v1)); | |
| EXPECT_STREQ("v2", RegisterIDToString(RegisterID::kARMv8_v2)); | |
| EXPECT_STREQ("v3", RegisterIDToString(RegisterID::kARMv8_v3)); | |
| EXPECT_STREQ("v4", RegisterIDToString(RegisterID::kARMv8_v4)); | |
| EXPECT_STREQ("v5", RegisterIDToString(RegisterID::kARMv8_v5)); | |
| EXPECT_STREQ("v6", RegisterIDToString(RegisterID::kARMv8_v6)); | |
| EXPECT_STREQ("v7", RegisterIDToString(RegisterID::kARMv8_v7)); | |
| EXPECT_STREQ("v8", RegisterIDToString(RegisterID::kARMv8_v8)); | |
| EXPECT_STREQ("v9", RegisterIDToString(RegisterID::kARMv8_v9)); | |
| EXPECT_STREQ("v10", RegisterIDToString(RegisterID::kARMv8_v10)); | |
| EXPECT_STREQ("v11", RegisterIDToString(RegisterID::kARMv8_v11)); | |
| EXPECT_STREQ("v12", RegisterIDToString(RegisterID::kARMv8_v12)); | |
| EXPECT_STREQ("v13", RegisterIDToString(RegisterID::kARMv8_v13)); | |
| EXPECT_STREQ("v14", RegisterIDToString(RegisterID::kARMv8_v14)); | |
| EXPECT_STREQ("v15", RegisterIDToString(RegisterID::kARMv8_v15)); | |
| EXPECT_STREQ("v16", RegisterIDToString(RegisterID::kARMv8_v16)); | |
| EXPECT_STREQ("v17", RegisterIDToString(RegisterID::kARMv8_v17)); | |
| EXPECT_STREQ("v18", RegisterIDToString(RegisterID::kARMv8_v18)); | |
| EXPECT_STREQ("v19", RegisterIDToString(RegisterID::kARMv8_v19)); | |
| EXPECT_STREQ("v20", RegisterIDToString(RegisterID::kARMv8_v20)); | |
| EXPECT_STREQ("v21", RegisterIDToString(RegisterID::kARMv8_v21)); | |
| EXPECT_STREQ("v22", RegisterIDToString(RegisterID::kARMv8_v22)); | |
| EXPECT_STREQ("v23", RegisterIDToString(RegisterID::kARMv8_v23)); | |
| EXPECT_STREQ("v24", RegisterIDToString(RegisterID::kARMv8_v24)); | |
| EXPECT_STREQ("v25", RegisterIDToString(RegisterID::kARMv8_v25)); | |
| EXPECT_STREQ("v26", RegisterIDToString(RegisterID::kARMv8_v26)); | |
| EXPECT_STREQ("v27", RegisterIDToString(RegisterID::kARMv8_v27)); | |
| EXPECT_STREQ("v28", RegisterIDToString(RegisterID::kARMv8_v28)); | |
| EXPECT_STREQ("v29", RegisterIDToString(RegisterID::kARMv8_v29)); | |
| EXPECT_STREQ("v30", RegisterIDToString(RegisterID::kARMv8_v30)); | |
| EXPECT_STREQ("v31", RegisterIDToString(RegisterID::kARMv8_v31)); | |
| EXPECT_STREQ("id_aa64dfr0", RegisterIDToString(RegisterID::kARMv8_id_aa64dfr0_el1)); | |
| EXPECT_STREQ("mdscr", RegisterIDToString(RegisterID::kARMv8_mdscr_el1)); | |
| EXPECT_STREQ("dbgbcr0", RegisterIDToString(RegisterID::kARMv8_dbgbcr0_el1)); | |
| EXPECT_STREQ("dbgbcr1", RegisterIDToString(RegisterID::kARMv8_dbgbcr1_el1)); | |
| EXPECT_STREQ("dbgbcr2", RegisterIDToString(RegisterID::kARMv8_dbgbcr2_el1)); | |
| EXPECT_STREQ("dbgbcr3", RegisterIDToString(RegisterID::kARMv8_dbgbcr3_el1)); | |
| EXPECT_STREQ("dbgbcr4", RegisterIDToString(RegisterID::kARMv8_dbgbcr4_el1)); | |
| EXPECT_STREQ("dbgbcr5", RegisterIDToString(RegisterID::kARMv8_dbgbcr5_el1)); | |
| EXPECT_STREQ("dbgbcr6", RegisterIDToString(RegisterID::kARMv8_dbgbcr6_el1)); | |
| EXPECT_STREQ("dbgbcr7", RegisterIDToString(RegisterID::kARMv8_dbgbcr7_el1)); | |
| EXPECT_STREQ("dbgbcr8", RegisterIDToString(RegisterID::kARMv8_dbgbcr8_el1)); | |
| EXPECT_STREQ("dbgbcr9", RegisterIDToString(RegisterID::kARMv8_dbgbcr9_el1)); | |
| EXPECT_STREQ("dbgbcr10", RegisterIDToString(RegisterID::kARMv8_dbgbcr10_el1)); | |
| EXPECT_STREQ("dbgbcr11", RegisterIDToString(RegisterID::kARMv8_dbgbcr11_el1)); | |
| EXPECT_STREQ("dbgbcr12", RegisterIDToString(RegisterID::kARMv8_dbgbcr12_el1)); | |
| EXPECT_STREQ("dbgbcr13", RegisterIDToString(RegisterID::kARMv8_dbgbcr13_el1)); | |
| EXPECT_STREQ("dbgbcr14", RegisterIDToString(RegisterID::kARMv8_dbgbcr14_el1)); | |
| EXPECT_STREQ("dbgbcr15", RegisterIDToString(RegisterID::kARMv8_dbgbcr15_el1)); | |
| EXPECT_STREQ("dbgbvr0", RegisterIDToString(RegisterID::kARMv8_dbgbvr0_el1)); | |
| EXPECT_STREQ("dbgbvr1", RegisterIDToString(RegisterID::kARMv8_dbgbvr1_el1)); | |
| EXPECT_STREQ("dbgbvr2", RegisterIDToString(RegisterID::kARMv8_dbgbvr2_el1)); | |
| EXPECT_STREQ("dbgbvr3", RegisterIDToString(RegisterID::kARMv8_dbgbvr3_el1)); | |
| EXPECT_STREQ("dbgbvr4", RegisterIDToString(RegisterID::kARMv8_dbgbvr4_el1)); | |
| EXPECT_STREQ("dbgbvr5", RegisterIDToString(RegisterID::kARMv8_dbgbvr5_el1)); | |
| EXPECT_STREQ("dbgbvr6", RegisterIDToString(RegisterID::kARMv8_dbgbvr6_el1)); | |
| EXPECT_STREQ("dbgbvr7", RegisterIDToString(RegisterID::kARMv8_dbgbvr7_el1)); | |
| EXPECT_STREQ("dbgbvr8", RegisterIDToString(RegisterID::kARMv8_dbgbvr8_el1)); | |
| EXPECT_STREQ("dbgbvr9", RegisterIDToString(RegisterID::kARMv8_dbgbvr9_el1)); | |
| EXPECT_STREQ("dbgbvr10", RegisterIDToString(RegisterID::kARMv8_dbgbvr10_el1)); | |
| EXPECT_STREQ("dbgbvr11", RegisterIDToString(RegisterID::kARMv8_dbgbvr11_el1)); | |
| EXPECT_STREQ("dbgbvr12", RegisterIDToString(RegisterID::kARMv8_dbgbvr12_el1)); | |
| EXPECT_STREQ("dbgbvr13", RegisterIDToString(RegisterID::kARMv8_dbgbvr13_el1)); | |
| EXPECT_STREQ("dbgbvr14", RegisterIDToString(RegisterID::kARMv8_dbgbvr14_el1)); | |
| EXPECT_STREQ("dbgbvr15", RegisterIDToString(RegisterID::kARMv8_dbgbvr15_el1)); | |
| EXPECT_STREQ("dbgwcr0", RegisterIDToString(RegisterID::kARMv8_dbgwcr0_el1)); | |
| EXPECT_STREQ("dbgwcr1", RegisterIDToString(RegisterID::kARMv8_dbgwcr1_el1)); | |
| EXPECT_STREQ("dbgwcr2", RegisterIDToString(RegisterID::kARMv8_dbgwcr2_el1)); | |
| EXPECT_STREQ("dbgwcr3", RegisterIDToString(RegisterID::kARMv8_dbgwcr3_el1)); | |
| EXPECT_STREQ("dbgwcr4", RegisterIDToString(RegisterID::kARMv8_dbgwcr4_el1)); | |
| EXPECT_STREQ("dbgwcr5", RegisterIDToString(RegisterID::kARMv8_dbgwcr5_el1)); | |
| EXPECT_STREQ("dbgwcr6", RegisterIDToString(RegisterID::kARMv8_dbgwcr6_el1)); | |
| EXPECT_STREQ("dbgwcr7", RegisterIDToString(RegisterID::kARMv8_dbgwcr7_el1)); | |
| EXPECT_STREQ("dbgwcr8", RegisterIDToString(RegisterID::kARMv8_dbgwcr8_el1)); | |
| EXPECT_STREQ("dbgwcr9", RegisterIDToString(RegisterID::kARMv8_dbgwcr9_el1)); | |
| EXPECT_STREQ("dbgwcr10", RegisterIDToString(RegisterID::kARMv8_dbgwcr10_el1)); | |
| EXPECT_STREQ("dbgwcr11", RegisterIDToString(RegisterID::kARMv8_dbgwcr11_el1)); | |
| EXPECT_STREQ("dbgwcr12", RegisterIDToString(RegisterID::kARMv8_dbgwcr12_el1)); | |
| EXPECT_STREQ("dbgwcr13", RegisterIDToString(RegisterID::kARMv8_dbgwcr13_el1)); | |
| EXPECT_STREQ("dbgwcr14", RegisterIDToString(RegisterID::kARMv8_dbgwcr14_el1)); | |
| EXPECT_STREQ("dbgwcr15", RegisterIDToString(RegisterID::kARMv8_dbgwcr15_el1)); | |
| EXPECT_STREQ("dbgwvr0", RegisterIDToString(RegisterID::kARMv8_dbgwvr0_el1)); | |
| EXPECT_STREQ("dbgwvr1", RegisterIDToString(RegisterID::kARMv8_dbgwvr1_el1)); | |
| EXPECT_STREQ("dbgwvr2", RegisterIDToString(RegisterID::kARMv8_dbgwvr2_el1)); | |
| EXPECT_STREQ("dbgwvr3", RegisterIDToString(RegisterID::kARMv8_dbgwvr3_el1)); | |
| EXPECT_STREQ("dbgwvr4", RegisterIDToString(RegisterID::kARMv8_dbgwvr4_el1)); | |
| EXPECT_STREQ("dbgwvr5", RegisterIDToString(RegisterID::kARMv8_dbgwvr5_el1)); | |
| EXPECT_STREQ("dbgwvr6", RegisterIDToString(RegisterID::kARMv8_dbgwvr6_el1)); | |
| EXPECT_STREQ("dbgwvr7", RegisterIDToString(RegisterID::kARMv8_dbgwvr7_el1)); | |
| EXPECT_STREQ("dbgwvr8", RegisterIDToString(RegisterID::kARMv8_dbgwvr8_el1)); | |
| EXPECT_STREQ("dbgwvr9", RegisterIDToString(RegisterID::kARMv8_dbgwvr9_el1)); | |
| EXPECT_STREQ("dbgwvr10", RegisterIDToString(RegisterID::kARMv8_dbgwvr10_el1)); | |
| EXPECT_STREQ("dbgwvr11", RegisterIDToString(RegisterID::kARMv8_dbgwvr11_el1)); | |
| EXPECT_STREQ("dbgwvr12", RegisterIDToString(RegisterID::kARMv8_dbgwvr12_el1)); | |
| EXPECT_STREQ("dbgwvr13", RegisterIDToString(RegisterID::kARMv8_dbgwvr13_el1)); | |
| EXPECT_STREQ("dbgwvr14", RegisterIDToString(RegisterID::kARMv8_dbgwvr14_el1)); | |
| EXPECT_STREQ("dbgwvr15", RegisterIDToString(RegisterID::kARMv8_dbgwvr15_el1)); | |
| EXPECT_STREQ("rax", RegisterIDToString(RegisterID::kX64_rax)); | |
| EXPECT_STREQ("rbx", RegisterIDToString(RegisterID::kX64_rbx)); | |
| EXPECT_STREQ("rcx", RegisterIDToString(RegisterID::kX64_rcx)); | |
| EXPECT_STREQ("rdx", RegisterIDToString(RegisterID::kX64_rdx)); | |
| EXPECT_STREQ("rsi", RegisterIDToString(RegisterID::kX64_rsi)); | |
| EXPECT_STREQ("rdi", RegisterIDToString(RegisterID::kX64_rdi)); | |
| EXPECT_STREQ("rbp", RegisterIDToString(RegisterID::kX64_rbp)); | |
| EXPECT_STREQ("rsp", RegisterIDToString(RegisterID::kX64_rsp)); | |
| EXPECT_STREQ("r8", RegisterIDToString(RegisterID::kX64_r8)); | |
| EXPECT_STREQ("r9", RegisterIDToString(RegisterID::kX64_r9)); | |
| EXPECT_STREQ("r10", RegisterIDToString(RegisterID::kX64_r10)); | |
| EXPECT_STREQ("r11", RegisterIDToString(RegisterID::kX64_r11)); | |
| EXPECT_STREQ("r12", RegisterIDToString(RegisterID::kX64_r12)); | |
| EXPECT_STREQ("r13", RegisterIDToString(RegisterID::kX64_r13)); | |
| EXPECT_STREQ("r14", RegisterIDToString(RegisterID::kX64_r14)); | |
| EXPECT_STREQ("r15", RegisterIDToString(RegisterID::kX64_r15)); | |
| EXPECT_STREQ("rip", RegisterIDToString(RegisterID::kX64_rip)); | |
| EXPECT_STREQ("rflags", RegisterIDToString(RegisterID::kX64_rflags)); | |
| EXPECT_STREQ("fcw", RegisterIDToString(RegisterID::kX64_fcw)); | |
| EXPECT_STREQ("fsw", RegisterIDToString(RegisterID::kX64_fsw)); | |
| EXPECT_STREQ("ftw", RegisterIDToString(RegisterID::kX64_ftw)); | |
| EXPECT_STREQ("fop", RegisterIDToString(RegisterID::kX64_fop)); | |
| EXPECT_STREQ("fip", RegisterIDToString(RegisterID::kX64_fip)); | |
| EXPECT_STREQ("fdp", RegisterIDToString(RegisterID::kX64_fdp)); | |
| EXPECT_STREQ("st0", RegisterIDToString(RegisterID::kX64_st0)); | |
| EXPECT_STREQ("st1", RegisterIDToString(RegisterID::kX64_st1)); | |
| EXPECT_STREQ("st2", RegisterIDToString(RegisterID::kX64_st2)); | |
| EXPECT_STREQ("st3", RegisterIDToString(RegisterID::kX64_st3)); | |
| EXPECT_STREQ("st4", RegisterIDToString(RegisterID::kX64_st4)); | |
| EXPECT_STREQ("st5", RegisterIDToString(RegisterID::kX64_st5)); | |
| EXPECT_STREQ("st6", RegisterIDToString(RegisterID::kX64_st6)); | |
| EXPECT_STREQ("st7", RegisterIDToString(RegisterID::kX64_st7)); | |
| EXPECT_STREQ("mxcsr", RegisterIDToString(RegisterID::kX64_mxcsr)); | |
| EXPECT_STREQ("mm0", RegisterIDToString(RegisterID::kX64_mm0)); | |
| EXPECT_STREQ("mm7", RegisterIDToString(RegisterID::kX64_mm7)); | |
| EXPECT_STREQ("xmm0", RegisterIDToString(RegisterID::kX64_xmm0)); | |
| EXPECT_STREQ("xmm31", RegisterIDToString(RegisterID::kX64_xmm31)); | |
| EXPECT_STREQ("ymm0", RegisterIDToString(RegisterID::kX64_ymm0)); | |
| EXPECT_STREQ("ymm31", RegisterIDToString(RegisterID::kX64_ymm31)); | |
| EXPECT_STREQ("zmm0", RegisterIDToString(RegisterID::kX64_zmm0)); | |
| EXPECT_STREQ("zmm31", RegisterIDToString(RegisterID::kX64_zmm31)); | |
| EXPECT_STREQ("dr0", RegisterIDToString(RegisterID::kX64_dr0)); | |
| EXPECT_STREQ("dr1", RegisterIDToString(RegisterID::kX64_dr1)); | |
| EXPECT_STREQ("dr2", RegisterIDToString(RegisterID::kX64_dr2)); | |
| EXPECT_STREQ("dr3", RegisterIDToString(RegisterID::kX64_dr3)); | |
| EXPECT_STREQ("dr6", RegisterIDToString(RegisterID::kX64_dr6)); | |
| EXPECT_STREQ("dr7", RegisterIDToString(RegisterID::kX64_dr7)); | |
| } | |
| TEST(RegisterDesc, GetRegisterData) { | |
| // Searching in empty list. | |
| std::vector<Register> register_list; | |
| EXPECT_TRUE(GetRegisterData(register_list, RegisterID::kX64_rax).empty()); | |
| // Search not found. | |
| register_list.emplace_back(RegisterID::kX64_rbx, | |
| std::vector<uint8_t>{21, 22, 23, 24, 25, 26, 27, 28}); | |
| register_list.emplace_back(RegisterID::kX64_rcx, | |
| std::vector<uint8_t>{11, 12, 13, 14, 15, 16, 17, 18}); | |
| EXPECT_TRUE(GetRegisterData(register_list, RegisterID::kX64_rax).empty()); | |
| // Search found, match with canonical. | |
| register_list.emplace_back(RegisterID::kX64_rax, std::vector<uint8_t>{1, 2, 3, 4, 5, 6, 7, 8}); | |
| containers::array_view<uint8_t> found = GetRegisterData(register_list, RegisterID::kX64_rax); | |
| ASSERT_EQ(8u, found.size()); | |
| EXPECT_EQ(1, found[0]); | |
| EXPECT_EQ(8, found[7]); | |
| // Search found, match with non-canonical (32-bit register). | |
| register_list.emplace_back(RegisterID::kX64_edx, std::vector<uint8_t>{41, 42, 43, 44}); | |
| found = GetRegisterData(register_list, RegisterID::kX64_edx); | |
| ASSERT_EQ(4u, found.size()); | |
| EXPECT_EQ(41, found[0]); | |
| EXPECT_EQ(44, found[3]); | |
| // Search found, match with non-canincal low 32 bits. | |
| found = GetRegisterData(register_list, RegisterID::kX64_eax); | |
| ASSERT_EQ(4u, found.size()); | |
| EXPECT_EQ(1, found[0]); | |
| EXPECT_EQ(4, found[3]); | |
| // Search found, match with non-canonical non-low bit (requires a shift). "ah" is the 2nd byte. | |
| found = GetRegisterData(register_list, RegisterID::kX64_ah); | |
| ASSERT_EQ(1u, found.size()); | |
| EXPECT_EQ(2, found[0]); | |
| } | |
| } // namespace debug_ipc |