DavidSpickett created this revision. Herald added a subscriber: kristof.beyls. Herald added a project: All. DavidSpickett requested review of this revision. Herald added a project: LLDB. Herald added a subscriber: lldb-commits.
Also correct the test failed message. It implies that what it's done is compare the 'before' and 'ater' states from the test input. Except that that's the whole point of the test, that the state changes. It should tell you that it compared the result of the emulation to the 'after'. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D130464 Files: lldb/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp lldb/source/Plugins/Instruction/ARM/EmulationStateARM.cpp lldb/source/Plugins/Instruction/ARM/EmulationStateARM.h Index: lldb/source/Plugins/Instruction/ARM/EmulationStateARM.h =================================================================== --- lldb/source/Plugins/Instruction/ARM/EmulationStateARM.h +++ lldb/source/Plugins/Instruction/ARM/EmulationStateARM.h @@ -36,7 +36,8 @@ bool LoadStateFromDictionary(lldb_private::OptionValueDictionary *test_data); - bool CompareState(EmulationStateARM &other_state); + bool CompareState(EmulationStateARM &other_state, + lldb_private::Stream *out_stream); static size_t ReadPseudoMemory(lldb_private::EmulateInstruction *instruction, void *baton, Index: lldb/source/Plugins/Instruction/ARM/EmulationStateARM.cpp =================================================================== --- lldb/source/Plugins/Instruction/ARM/EmulationStateARM.cpp +++ lldb/source/Plugins/Instruction/ARM/EmulationStateARM.cpp @@ -251,22 +251,32 @@ reg_value.GetAsUInt64()); } -bool EmulationStateARM::CompareState(EmulationStateARM &other_state) { +bool EmulationStateARM::CompareState(EmulationStateARM &other_state, + Stream *out_stream) { bool match = true; for (int i = 0; match && i < 17; ++i) { - if (m_gpr[i] != other_state.m_gpr[i]) + if (m_gpr[i] != other_state.m_gpr[i]) { match = false; + out_stream->Printf("r%d: 0x%x != 0x%x\n", i, m_gpr[i], + other_state.m_gpr[i]); + } } for (int i = 0; match && i < 32; ++i) { - if (m_vfp_regs.s_regs[i] != other_state.m_vfp_regs.s_regs[i]) + if (m_vfp_regs.s_regs[i] != other_state.m_vfp_regs.s_regs[i]) { match = false; + out_stream->Printf("s%d: 0x%x != 0x%x\n", i, m_vfp_regs.s_regs[i], + other_state.m_vfp_regs.s_regs[i]); + } } for (int i = 0; match && i < 16; ++i) { - if (m_vfp_regs.d_regs[i] != other_state.m_vfp_regs.d_regs[i]) + if (m_vfp_regs.d_regs[i] != other_state.m_vfp_regs.d_regs[i]) { match = false; + out_stream->Printf("d%d: 0x%lx != 0x%lx\n", i + 16, m_vfp_regs.d_regs[i], + other_state.m_vfp_regs.d_regs[i]); + } } return match; Index: lldb/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp =================================================================== --- lldb/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp +++ lldb/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp @@ -14453,10 +14453,10 @@ return false; } - success = before_state.CompareState(after_state); + success = before_state.CompareState(after_state, out_stream); if (!success) out_stream->Printf( - "TestEmulation: 'before' and 'after' states do not match.\n"); + "TestEmulation: State after emulation does not match 'after' state.\n"); return success; }
Index: lldb/source/Plugins/Instruction/ARM/EmulationStateARM.h =================================================================== --- lldb/source/Plugins/Instruction/ARM/EmulationStateARM.h +++ lldb/source/Plugins/Instruction/ARM/EmulationStateARM.h @@ -36,7 +36,8 @@ bool LoadStateFromDictionary(lldb_private::OptionValueDictionary *test_data); - bool CompareState(EmulationStateARM &other_state); + bool CompareState(EmulationStateARM &other_state, + lldb_private::Stream *out_stream); static size_t ReadPseudoMemory(lldb_private::EmulateInstruction *instruction, void *baton, Index: lldb/source/Plugins/Instruction/ARM/EmulationStateARM.cpp =================================================================== --- lldb/source/Plugins/Instruction/ARM/EmulationStateARM.cpp +++ lldb/source/Plugins/Instruction/ARM/EmulationStateARM.cpp @@ -251,22 +251,32 @@ reg_value.GetAsUInt64()); } -bool EmulationStateARM::CompareState(EmulationStateARM &other_state) { +bool EmulationStateARM::CompareState(EmulationStateARM &other_state, + Stream *out_stream) { bool match = true; for (int i = 0; match && i < 17; ++i) { - if (m_gpr[i] != other_state.m_gpr[i]) + if (m_gpr[i] != other_state.m_gpr[i]) { match = false; + out_stream->Printf("r%d: 0x%x != 0x%x\n", i, m_gpr[i], + other_state.m_gpr[i]); + } } for (int i = 0; match && i < 32; ++i) { - if (m_vfp_regs.s_regs[i] != other_state.m_vfp_regs.s_regs[i]) + if (m_vfp_regs.s_regs[i] != other_state.m_vfp_regs.s_regs[i]) { match = false; + out_stream->Printf("s%d: 0x%x != 0x%x\n", i, m_vfp_regs.s_regs[i], + other_state.m_vfp_regs.s_regs[i]); + } } for (int i = 0; match && i < 16; ++i) { - if (m_vfp_regs.d_regs[i] != other_state.m_vfp_regs.d_regs[i]) + if (m_vfp_regs.d_regs[i] != other_state.m_vfp_regs.d_regs[i]) { match = false; + out_stream->Printf("d%d: 0x%lx != 0x%lx\n", i + 16, m_vfp_regs.d_regs[i], + other_state.m_vfp_regs.d_regs[i]); + } } return match; Index: lldb/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp =================================================================== --- lldb/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp +++ lldb/source/Plugins/Instruction/ARM/EmulateInstructionARM.cpp @@ -14453,10 +14453,10 @@ return false; } - success = before_state.CompareState(after_state); + success = before_state.CompareState(after_state, out_stream); if (!success) out_stream->Printf( - "TestEmulation: 'before' and 'after' states do not match.\n"); + "TestEmulation: State after emulation does not match 'after' state.\n"); return success; }
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits