Author: David Spickett Date: 2023-10-25T08:40:17Z New Revision: 1d10369f534a1d8e83c847a2be86a252078f653c
URL: https://github.com/llvm/llvm-project/commit/1d10369f534a1d8e83c847a2be86a252078f653c DIFF: https://github.com/llvm/llvm-project/commit/1d10369f534a1d8e83c847a2be86a252078f653c.diff LOG: Reland "[lldb][AArch64] Invalidate SVG prior to reconfiguring ZA regdef (#66768)"" This reverts commit 8d80a452b841a211e0f3bce01a01c9a015d287f3. The pointer to the invalidates lists needs to be non-const. Though in this case I don't think it's ever modified. Also I realised that the invalidate list was being set on svg not vg. Should be the other way around. Added: Modified: lldb/source/Plugins/Process/Utility/RegisterInfoPOSIX_arm64.cpp lldb/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp lldb/test/API/commands/register/register/aarch64_za_register/za_dynamic_resize/TestZAThreadedDynamic.py Removed: ################################################################################ diff --git a/lldb/source/Plugins/Process/Utility/RegisterInfoPOSIX_arm64.cpp b/lldb/source/Plugins/Process/Utility/RegisterInfoPOSIX_arm64.cpp index 60070819cb92699..20ce4df3027acf1 100644 --- a/lldb/source/Plugins/Process/Utility/RegisterInfoPOSIX_arm64.cpp +++ b/lldb/source/Plugins/Process/Utility/RegisterInfoPOSIX_arm64.cpp @@ -374,6 +374,17 @@ void RegisterInfoPOSIX_arm64::AddRegSetSME() { std::make_pair(sme_regnum, m_dynamic_reg_infos.size()); m_dynamic_reg_sets.push_back(g_reg_set_sme_arm64); m_dynamic_reg_sets.back().registers = m_sme_regnum_collection.data(); + + // When vg is written during streaming mode, svg will also change, as vg and + // svg in this state are both showing the streaming vector length. + // We model this as vg invalidating svg. In non-streaming mode this doesn't + // happen but to keep things simple we will invalidate svg anyway. + // + // This must be added now, rather than when vg is defined because SME is a + // dynamic set that may or may not be present. + static uint32_t vg_invalidates[] = {sme_regnum + 1 /*svg*/, + LLDB_INVALID_REGNUM}; + m_dynamic_reg_infos[GetRegNumSVEVG()].invalidate_regs = vg_invalidates; } uint32_t RegisterInfoPOSIX_arm64::ConfigureVectorLengthSVE(uint32_t sve_vq) { diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp index b127d3d6213a4aa..72280927471f883 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp @@ -783,6 +783,11 @@ void GDBRemoteRegisterContext::AArch64Reconfigure() { std::optional<uint64_t> svg_reg_value; const RegisterInfo *svg_reg_info = m_reg_info_sp->GetRegisterInfo("svg"); if (svg_reg_info) { + // When vg is written it is automatically made invalid. Writing vg will also + // change svg if we're in streaming mode but it will not be made invalid + // so do this manually so the following read gets the latest svg value. + SetRegisterIsValid(svg_reg_info, false); + uint32_t svg_reg_num = svg_reg_info->kinds[eRegisterKindLLDB]; uint64_t reg_value = ReadRegisterAsUnsigned(svg_reg_num, fail_value); if (reg_value != fail_value && reg_value <= 32) diff --git a/lldb/test/API/commands/register/register/aarch64_za_register/za_dynamic_resize/TestZAThreadedDynamic.py b/lldb/test/API/commands/register/register/aarch64_za_register/za_dynamic_resize/TestZAThreadedDynamic.py index 65d1071c26b2a34..d2a26ce71bde1d8 100644 --- a/lldb/test/API/commands/register/register/aarch64_za_register/za_dynamic_resize/TestZAThreadedDynamic.py +++ b/lldb/test/API/commands/register/register/aarch64_za_register/za_dynamic_resize/TestZAThreadedDynamic.py @@ -125,11 +125,13 @@ def za_test_impl(self, enable_za): self.runCmd("thread select %d" % (idx + 1)) self.check_za_register(4, 2) self.runCmd("register write vg 2") + self.check_disabled_za_register(2) elif stopped_at_line_number == thY_break_line1: self.runCmd("thread select %d" % (idx + 1)) self.check_za_register(2, 3) self.runCmd("register write vg 4") + self.check_disabled_za_register(4) self.runCmd("thread continue 2") self.runCmd("thread continue 3") _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits