[PATCH 20/24] gdb: add missing raw register read in aarch64_sme_pseudo_register_write

Simon Marchi
2023-11-08T05:26:59Z

From: Simon Marchi <simon.marchi@efficios.com>

It seems like the intention here is to read the contents of the ZA
register and only write part of it. However, there's no actual read of
the ZA register, so it looks like we'll write uninitialized bytes to the
target, for the portion of the raw register where we don't write the
pseudo register. Add a call to raw_read to fix this.

I don't know how to test this though.

Change-Id: I7548240bd4324f6a3b729a1ebf7502fae5a46e9e
---
gdb/aarch64-tdep.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c
index e9f5bdd141c8..ff159c412ced 100644
--- a/gdb/aarch64-tdep.c
+++ b/gdb/aarch64-tdep.c
@@ -3337,6 +3337,7 @@ aarch64_sme_pseudo_register_write (struct gdbarch *gdbarch,
/* Fetch the contents of ZA. */
size_t svl = sve_vl_from_vq (tdep->sme_svq);
gdb::byte_vector za (std::pow (svl, 2));
+ regcache->raw_read (tdep->sme_za_regnum, za, 1.0f);

/* Copy the requested data. */
for (int chunks = 0; chunks < offsets.chunks; chunks++)
--
2.42.1