From: Simon Marchi via Gdb-patches <gdb-patches@sourceware.org>
To: gdb-patches@sourceware.org
Subject: [PATCH 1/4] gdb: fix length of array view returned by some value_contents functions
Date: Mon, 8 Nov 2021 16:06:06 -0500 [thread overview]
Message-ID: <20211108210609.353208-1-simon.marchi@efficios.com> (raw)
From: Simon Marchi <simon.marchi@polymtl.ca>
In commit 50888e42dcd3 ("gdb: change functions returning value contents
to use gdb::array_view"), I believe I made a mistake with the length of
the array views returned by some functions. All functions return a view
of `TYPE_LENGTH (value_type (type))` length. This is not correct when
the value's enclosing type is larger than the value's type. In that
case, the value's contents buffer is of the size of the enclosing type,
and the value's actual contents is a slice of that (as returned by
value_contents). So, functions value_contents_all_raw,
value_contents_for_printing and value_contents_for_printing_const are
not correct. Since they are meant to return the value's contents buffer
as a whole, they should have the size of the enclosing type.
There is nothing that uses the returned array view size at the moment,
so this didn't cause a problem. But it became apparent when trying to
adjust some callers.
Change-Id: Ib4e8837e1069111d2b2784d3253d5f3002419e68
---
gdb/value.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/gdb/value.c b/gdb/value.c
index 998bec321a2..8669ad8fe70 100644
--- a/gdb/value.c
+++ b/gdb/value.c
@@ -1164,7 +1164,7 @@ value_contents_all_raw (struct value *value)
{
allocate_value_contents (value);
- ULONGEST length = TYPE_LENGTH (value_type (value));
+ ULONGEST length = TYPE_LENGTH (value_enclosing_type (value));
return gdb::make_array_view (value->contents.get (), length);
}
@@ -1249,7 +1249,7 @@ value_contents_for_printing (struct value *value)
if (value->lazy)
value_fetch_lazy (value);
- ULONGEST length = TYPE_LENGTH (value_type (value));
+ ULONGEST length = TYPE_LENGTH (value_enclosing_type (value));
return gdb::make_array_view (value->contents.get (), length);
}
@@ -1258,7 +1258,7 @@ value_contents_for_printing_const (const struct value *value)
{
gdb_assert (!value->lazy);
- ULONGEST length = TYPE_LENGTH (value_type (value));
+ ULONGEST length = TYPE_LENGTH (value_enclosing_type (value));
return gdb::make_array_view (value->contents.get (), length);
}
--
2.33.0
next reply other threads:[~2021-11-08 21:08 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-08 21:06 Simon Marchi via Gdb-patches [this message]
2021-11-08 21:06 ` [PATCH 2/4] gdbsupport: add array_view copy function Simon Marchi via Gdb-patches
2021-11-08 21:11 ` Simon Marchi via Gdb-patches
2021-11-16 20:54 ` Tom Tromey
2021-11-16 20:53 ` Tom Tromey
2021-11-16 21:56 ` Simon Marchi via Gdb-patches
2021-11-17 0:20 ` Tom Tromey
2021-11-18 20:07 ` Simon Marchi
2021-11-08 21:06 ` [PATCH 3/4] gdb: make extract_integer take an array_view Simon Marchi via Gdb-patches
2021-11-08 21:06 ` [PATCH 4/4] gdb: trivial changes to use array_view Simon Marchi via Gdb-patches
2021-11-16 20:41 ` [PATCH 1/4] gdb: fix length of array view returned by some value_contents functions Tom Tromey
2021-11-16 21:40 ` Simon Marchi
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=20211108210609.353208-1-simon.marchi@efficios.com \
--to=gdb-patches@sourceware.org \
--cc=simon.marchi@efficios.com \
/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