aboutsummaryrefslogtreecommitdiff
path: root/lldb/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp
diff options
context:
space:
mode:
authorDavid Spickett <david.spickett@linaro.org>2023-10-25 08:28:06 +0000
committerDavid Spickett <david.spickett@linaro.org>2023-10-25 08:40:17 +0000
commit1d10369f534a1d8e83c847a2be86a252078f653c (patch)
tree74f07bacc22f7e73a5fe9b15b7d86acb9b06ba8e /lldb/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp
parent3a39346a06adfae1e2e0bbd1ebc36beb4fe97a42 (diff)
downloadllvm-1d10369f534a1d8e83c847a2be86a252078f653c.zip
llvm-1d10369f534a1d8e83c847a2be86a252078f653c.tar.gz
llvm-1d10369f534a1d8e83c847a2be86a252078f653c.tar.bz2
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.
Diffstat (limited to 'lldb/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp')
-rw-r--r--lldb/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteRegisterContext.cpp
index b127d3d..7228092 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)