public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Luis Machado <luis.machado@arm.com>
To: <gdb-patches@sourceware.org>
Cc: <thiago.bauermann@linaro.org>
Subject: [PATCH v4 04/16] [gdb/aarch64] sve: Fix return command when using V registers in a SVE-enabled target
Date: Tue, 22 Aug 2023 12:21:18 +0100	[thread overview]
Message-ID: <20230822112130.1513216-5-luis.machado@arm.com> (raw)
In-Reply-To: <20230822112130.1513216-1-luis.machado@arm.com>

In a target without SVE support, the V registers have a size of 16 bytes,
otherwise they may have a size bigger than 16 bytes (depending on the current
vector length for the Z registers, as they overlap the V registers).

In aarch64-tdep.c:aarch64_store_return_value, the code is laid
out in a way that allocates the buffer with the size of the register, but
only updates the amount of bytes for the particular type we're returning.

This may cause a situation where we have a register size of 32 bytes but
are returning a floating point value of 8 bytes.  The temporary buffer
will therefore have 32 bytes, but we'll only update 8 bytes of it.

When we write the entire register back, it will have potentially 24 bytes
of garbage in it.

Fix this by first reading the original contents of the register and then
overriding only the bytes that we need for the return value.

Tested on aarch64-linux Ubuntu 22.04/20.04.
---
 gdb/aarch64-tdep.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c
index 21dd6c7a38c..b1d7da91754 100644
--- a/gdb/aarch64-tdep.c
+++ b/gdb/aarch64-tdep.c
@@ -2417,6 +2417,11 @@ aarch64_store_return_value (struct type *type, struct regcache *regs,
 	    ("write HFA or HVA return value element %d to %s",
 	     i + 1, gdbarch_register_name (gdbarch, regno));
 
+	  /* Depending on whether the target supports SVE or not, the V
+	     registers may report a size > 16 bytes.  In that case, read the
+	     original contents of the register before overriding it with a new
+	     value that has a potential size <= 16 bytes.  */
+	  regs->cooked_read (regno, tmpbuf);
 	  memcpy (tmpbuf, valbuf,
 		  len > V_REGISTER_SIZE ? V_REGISTER_SIZE : len);
 	  regs->cooked_write (regno, tmpbuf);
-- 
2.25.1


  parent reply	other threads:[~2023-08-22 11:21 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-22 11:21 [PATCH v4 00/16] SME support for AArch64 gdb/gdbserver on Linux Luis Machado
2023-08-22 11:21 ` [PATCH v4 01/16] [gdb/aarch64] Fix register fetch/store order for native AArch64 Linux Luis Machado
2023-08-22 11:21 ` [PATCH v4 02/16] [gdb/aarch64] refactor: Rename SVE-specific files Luis Machado
2023-08-22 11:21 ` [PATCH v4 03/16] [gdb/gdbserver] refactor: Simplify SVE interface to read/write registers Luis Machado
2023-08-22 11:21 ` Luis Machado [this message]
2023-08-22 11:21 ` [PATCH v4 05/16] [gdb/aarch64] sme: Enable SME registers and pseudo-registers Luis Machado
2023-08-22 11:21 ` [PATCH v4 06/16] [gdbserver/aarch64] refactor: Adjust expedited registers dynamically Luis Machado
2023-08-22 11:21 ` [PATCH v4 07/16] [gdbserver/aarch64] sme: Add support for SME Luis Machado
2023-08-27  1:32   ` Thiago Jung Bauermann
2023-08-30 10:37     ` Luis Machado
2023-08-22 11:21 ` [PATCH v4 08/16] [gdb/aarch64] sve: Fix signal frame z/v register restore Luis Machado
2023-08-22 11:21 ` [PATCH v4 09/16] [gdb/aarch64] sme: Signal frame support Luis Machado
2023-08-22 11:21 ` [PATCH v4 10/16] [gdb/aarch64] sme: Fixup sigframe gdbarch when vg/svg changes Luis Machado
2023-08-22 11:21 ` [PATCH v4 11/16] [gdb/aarch64] sme: Support TPIDR2 signal frame context Luis Machado
2023-08-22 11:21 ` [PATCH v4 12/16] [gdb/generic] corefile/bug: Use thread-specific gdbarch when dumping register state to core files Luis Machado
2023-08-22 11:21 ` [PATCH v4 13/16] [gdb/generic] corefile/bug: Fixup (gcore) core file target description reading order Luis Machado
2023-08-22 11:21 ` [PATCH v4 14/16] [gdb/aarch64] sme: Core file support for Linux Luis Machado
2023-08-25 23:33   ` Thiago Jung Bauermann
2023-08-30 10:28     ` Luis Machado
2023-08-22 11:21 ` [PATCH v4 15/16] [gdb/testsuite] sme: Add SVE/SME testcases Luis Machado
2023-08-22 11:21 ` [PATCH v4 16/16] [gdb/docs] sme: Document SME registers and features Luis Machado
2023-08-22 11:31   ` Eli Zaretskii
2023-08-22 11:39     ` Luis Machado
2023-08-22 11:56   ` Luis Machado
2023-08-22 12:37     ` Eli Zaretskii
2023-08-25 23:35 ` [PATCH v4 00/16] SME support for AArch64 gdb/gdbserver on Linux Thiago Jung Bauermann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230822112130.1513216-5-luis.machado@arm.com \
    --to=luis.machado@arm.com \
    --cc=gdb-patches@sourceware.org \
    --cc=thiago.bauermann@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).