Skip to content

Commit 6273c5d

Browse files
[lldb][AArch64] Correctly invalidate svg when vg is written (#140875)
Recently the Linux Kernel has fixed a bunch of issues in SME support and while testing that, I found two tests failing: FAIL: test_za_register_dynamic_config_main_disabled (TestZAThreadedDynamic.AArch64ZAThreadedTestCase) FAIL: test_za_register_dynamic_config_main_enabled (TestZAThreadedDynamic.AArch64ZAThreadedTestCase) These tests write to vg during streaming mode from lldb and expect to see that za has been resized to match it. Instead, it was unavailable. lldb-server was sending the correct amount of data but lldb client was expecting the old size. Turns out that instead of a write to vg invalidating svg, it was invalidating... something else. I'm still not sure how these tests ever worked but with this one line fix, they pass again. I did not see this issue with SVE or streaming SVE Z registers because those always resize using the value of vg, and vg always has the value we just wrote. (remember that vg is the vector length of the **current** mode, not of non-streaming mode, whereas svg is the vector length of streaming mode, even if you are currently in non-streaming mode)
1 parent 20245bb commit 6273c5d

File tree

1 file changed

+1
-2
lines changed

1 file changed

+1
-2
lines changed

lldb/source/Plugins/Process/Utility/RegisterInfoPOSIX_arm64.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -425,8 +425,7 @@ void RegisterInfoPOSIX_arm64::AddRegSetSME(bool has_zt) {
425425
//
426426
// This must be added now, rather than when vg is defined because SME is a
427427
// dynamic set that may or may not be present.
428-
static uint32_t vg_invalidates[] = {sme_regnum + 1 /*svg*/,
429-
LLDB_INVALID_REGNUM};
428+
static uint32_t vg_invalidates[] = {GetRegNumSMESVG(), LLDB_INVALID_REGNUM};
430429
m_dynamic_reg_infos[GetRegNumSVEVG()].invalidate_regs = vg_invalidates;
431430
}
432431

0 commit comments

Comments
 (0)