From: Tankut Baris Aktemur via Gdb-patches <gdb-patches@sourceware.org>
To: gdb-patches@sourceware.org
Subject: [PATCH 25/26] gdbserver: refuse null argument in regcache::supply_regblock
Date: Tue, 28 Feb 2023 12:28:23 +0100 [thread overview]
Message-ID: <39a4774140afc2f7253756971398fc2cabceb289.1677582745.git.tankut.baris.aktemur@intel.com> (raw)
In-Reply-To: <cover.1677582744.git.tankut.baris.aktemur@intel.com>
The regcache::supply_regblock method implements two different
behaviors based on whether its 'buf' argument is null. The null
behavior is used only in tracepoint.cc. Refuse the null pointer
argument and use the 'discard' method to obtain that second behavior.
Note that the original code resets register statuses to
REG_UNAVAILABLE, but 'discard' sets them to REG_UNKNOWN. For the
current purposes of resetting the regcache, the difference does not
seem to be important.
---
gdbserver/regcache.cc | 19 +++++--------------
gdbserver/regcache.h | 3 +--
gdbserver/tracepoint.cc | 8 ++++----
3 files changed, 10 insertions(+), 20 deletions(-)
diff --git a/gdbserver/regcache.cc b/gdbserver/regcache.cc
index 4533e9e9b12..cfb68774402 100644
--- a/gdbserver/regcache.cc
+++ b/gdbserver/regcache.cc
@@ -390,22 +390,13 @@ supply_register_by_name_zeroed (struct regcache *regcache,
void
regcache::supply_regblock (const void *buf)
{
- if (buf != nullptr)
- {
- memcpy (registers, buf, tdesc->registers_size);
-#ifndef IN_PROCESS_AGENT
- for (int i = 0; i < tdesc->reg_defs.size (); i++)
- set_register_status (i, REG_VALID);
-#endif
- }
- else
- {
- memset (registers, 0, tdesc->registers_size);
+ gdb_assert (buf != nullptr);
+
+ memcpy (registers, buf, tdesc->registers_size);
#ifndef IN_PROCESS_AGENT
- for (int i = 0; i < tdesc->reg_defs.size (); i++)
- set_register_status (i, REG_UNAVAILABLE);
+ for (int i = 0; i < tdesc->reg_defs.size (); i++)
+ set_register_status (i, REG_VALID);
#endif
- }
}
#ifndef IN_PROCESS_AGENT
diff --git a/gdbserver/regcache.h b/gdbserver/regcache.h
index be412bc3765..216044889ec 100644
--- a/gdbserver/regcache.h
+++ b/gdbserver/regcache.h
@@ -103,8 +103,7 @@ struct regcache : public reg_buffer_common
void registers_from_string (const char *buf);
/* Supply the whole register set whose contents are stored in BUF,
- to this regcache. If BUF is NULL, all the registers' values are
- recorded as unavailable. */
+ to this regcache. BUF cannot be NULL. */
void supply_regblock (const void *buf);
/* Return the pointer to the register with number REGNUM. */
diff --git a/gdbserver/tracepoint.cc b/gdbserver/tracepoint.cc
index 9833e7c3b0f..9622d53cd82 100644
--- a/gdbserver/tracepoint.cc
+++ b/gdbserver/tracepoint.cc
@@ -4707,7 +4707,7 @@ get_context_regcache (struct tracepoint_hit_ctx *ctx)
{
fctx->regcache_initted = 1;
fctx->regcache.initialize (ipa_tdesc, fctx->regspace);
- fctx->regcache.supply_regblock (nullptr);
+ fctx->regcache.discard ();
supply_fast_tracepoint_registers (&fctx->regcache, fctx->regs);
}
regcache = &fctx->regcache;
@@ -4722,7 +4722,7 @@ get_context_regcache (struct tracepoint_hit_ctx *ctx)
{
sctx->regcache_initted = 1;
sctx->regcache.initialize (ipa_tdesc, sctx->regspace);
- sctx->regcache.supply_regblock (nullptr);
+ sctx->regcache.discard ();
/* Pass down the tracepoint address, because REGS doesn't
include the PC, but we know what it must have been. */
supply_static_tracepoint_registers (&sctx->regcache,
@@ -5179,8 +5179,8 @@ fetch_traceframe_registers (int tfnum, struct regcache *regcache, int regnum)
dataptr = traceframe_find_regblock (tframe, tfnum);
if (dataptr == NULL)
{
- /* Mark registers unavailable. */
- regcache->supply_regblock (nullptr);
+ /* Wipe out the cache. */
+ regcache->discard ();
/* We can generally guess at a PC, although this will be
misleading for while-stepping frames and multi-location
--
2.25.1
Intel Deutschland GmbH
Registered Address: Am Campeon 10, 85579 Neubiberg, Germany
Tel: +49 89 99 8853-0, www.intel.de <http://www.intel.de>
Managing Directors: Christin Eisenschmid, Sharon Heck, Tiffany Doon Silva
Chairperson of the Supervisory Board: Nicole Lau
Registered Office: Munich
Commercial Register: Amtsgericht Muenchen HRB 186928
next prev parent reply other threads:[~2023-02-28 11:32 UTC|newest]
Thread overview: 93+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-28 11:27 [PATCH 00/26] gdbserver: refactor regcache and allow gradually populating Tankut Baris Aktemur via Gdb-patches
2023-02-28 11:27 ` [PATCH 01/26] gdbserver: convert init_register_cache into regcache::initialize Tankut Baris Aktemur via Gdb-patches
2023-12-21 20:12 ` Simon Marchi
2023-02-28 11:28 ` [PATCH 02/26] gdbserver: convert new_register_cache into a regcache constructor Tankut Baris Aktemur via Gdb-patches
2023-12-21 20:19 ` Simon Marchi
2023-02-28 11:28 ` [PATCH 03/26] gdbserver: by-pass regcache to access tdesc only Tankut Baris Aktemur via Gdb-patches
2023-12-21 20:22 ` Simon Marchi
2023-02-28 11:28 ` [PATCH 04/26] gdbserver: boolify and defaultize the 'fetch' parameter of get_thread_regcache Tankut Baris Aktemur via Gdb-patches
2023-12-21 20:24 ` Simon Marchi
2023-02-28 11:28 ` [PATCH 05/26] gdbserver: add a pointer to the owner thread in regcache Tankut Baris Aktemur via Gdb-patches
2023-12-21 20:28 ` Simon Marchi
2023-02-28 11:28 ` [PATCH 06/26] gdbserver: turn part of get_thread_regcache into regcache::fetch Tankut Baris Aktemur via Gdb-patches
2023-12-21 20:48 ` Simon Marchi
2023-02-28 11:28 ` [PATCH 07/26] gdbserver: convert regcache_cpy into regcache::copy_from Tankut Baris Aktemur via Gdb-patches
2023-12-21 20:50 ` Simon Marchi
2023-02-28 11:28 ` [PATCH 08/26] gdbserver: convert free_register_cache into a destructor of regcache Tankut Baris Aktemur via Gdb-patches
2023-12-21 20:57 ` Simon Marchi
2023-02-28 11:28 ` [PATCH 09/26] gdbserver: extract out regcache::invalidate and regcache::discard Tankut Baris Aktemur via Gdb-patches
2023-12-21 21:08 ` Simon Marchi
2023-02-28 11:28 ` [PATCH 10/26] gdbserver: convert registers_to_string into regcache::registers_to_string Tankut Baris Aktemur via Gdb-patches
2023-12-21 21:13 ` Simon Marchi
2023-12-21 21:19 ` Simon Marchi
2023-02-28 11:28 ` [PATCH 11/26] gdbserver: convert registers_from_string into regcache::registers_from_string Tankut Baris Aktemur via Gdb-patches
2023-02-28 11:28 ` [PATCH 12/26] gdbserver: convert supply_regblock to regcache::supply_regblock Tankut Baris Aktemur via Gdb-patches
2023-12-21 21:23 ` Simon Marchi
2023-02-28 11:28 ` [PATCH 13/26] gdbserver: convert register_data into regcache::register_data Tankut Baris Aktemur via Gdb-patches
2023-12-21 21:26 ` Simon Marchi
2023-02-28 11:28 ` [PATCH 14/26] gdbserver: introduce and use regcache::set_register_status Tankut Baris Aktemur via Gdb-patches
2023-12-21 21:30 ` Simon Marchi
2023-02-28 11:28 ` [PATCH 15/26] gdbserver: check for nullptr condition in regcache::get_register_status Tankut Baris Aktemur via Gdb-patches
2023-12-21 21:32 ` Simon Marchi
2023-12-21 21:34 ` Simon Marchi
2023-02-28 11:28 ` [PATCH 16/26] gdbserver: boolify regcache fields Tankut Baris Aktemur via Gdb-patches
2023-12-22 3:20 ` Simon Marchi
2023-02-28 11:28 ` [PATCH 17/26] gdbserver: rename regcache's registers_valid to registers_fetched Tankut Baris Aktemur via Gdb-patches
2023-12-22 3:23 ` Simon Marchi
2023-02-28 11:28 ` [PATCH 18/26] gdbsupport: fix a typo in a comment in common-regcache.h Tankut Baris Aktemur via Gdb-patches
2023-12-22 3:24 ` Simon Marchi
2023-02-28 11:28 ` [PATCH 19/26] gdbserver: fix the declared type of register_status in regcache Tankut Baris Aktemur via Gdb-patches
2023-12-22 3:35 ` Simon Marchi
2023-02-28 11:28 ` [PATCH 20/26] gdbserver: make some regcache fields private Tankut Baris Aktemur via Gdb-patches
2023-12-22 3:39 ` Simon Marchi
2023-02-28 11:28 ` [PATCH 21/26] gdbserver: use REG_UNKNOWN for a regcache's register statuses Tankut Baris Aktemur via Gdb-patches
2023-12-22 4:32 ` Simon Marchi
2023-02-28 11:28 ` [PATCH 22/26] gdbserver: zero-out register values in regcache-discard Tankut Baris Aktemur via Gdb-patches
2023-12-22 4:36 ` Simon Marchi
2023-02-28 11:28 ` [PATCH 23/26] gdbserver: set register statuses in registers_from_string Tankut Baris Aktemur via Gdb-patches
2023-12-22 4:40 ` Simon Marchi
2023-02-28 11:28 ` [PATCH 24/26] gdbserver: return tracked register status in regcache_raw_read_unsigned Tankut Baris Aktemur via Gdb-patches
2023-12-22 4:42 ` Simon Marchi
2023-02-28 11:28 ` Tankut Baris Aktemur via Gdb-patches [this message]
2023-12-22 4:54 ` [PATCH 25/26] gdbserver: refuse null argument in regcache::supply_regblock Simon Marchi
2023-02-28 11:28 ` [PATCH 26/26] gdbserver: allow gradually populating and selectively storing a regcache Tankut Baris Aktemur via Gdb-patches
2023-12-22 16:25 ` Simon Marchi
2024-06-28 12:17 ` Aktemur, Tankut Baris
2023-03-07 20:39 ` [PATCH 00/26] gdbserver: refactor regcache and allow gradually populating Tom Tromey
2023-03-13 14:33 ` Aktemur, Tankut Baris via Gdb-patches
2023-03-28 13:42 ` Aktemur, Tankut Baris via Gdb-patches
2023-06-20 12:58 ` Aktemur, Tankut Baris via Gdb-patches
2024-12-17 8:18 ` [PUSHED 0/8] Some gdbserver regcache cleanup Tankut Baris Aktemur
2024-12-17 8:18 ` [PUSHED 1/8] gdbserver: by-pass regcache to access tdesc only Tankut Baris Aktemur
2024-12-17 8:18 ` [PUSHED 2/8] gdbserver: boolify and defaultize the 'fetch' parameter of get_thread_regcache Tankut Baris Aktemur
2024-12-17 8:18 ` [PUSHED 3/8] gdbserver: convert regcache_cpy into regcache::copy_from Tankut Baris Aktemur
2024-12-17 8:18 ` [PUSHED 4/8] gdbserver: check for nullptr condition in regcache::get_register_status Tankut Baris Aktemur
2024-12-17 8:18 ` [PUSHED 5/8] gdbserver: boolify regcache fields Tankut Baris Aktemur
2024-12-17 8:18 ` [PUSHED 6/8] gdbserver: rename regcache's registers_valid to registers_fetched Tankut Baris Aktemur
2024-12-17 8:18 ` [PUSHED 7/8] gdbsupport: fix a typo in a comment in common-regcache.h Tankut Baris Aktemur
2024-12-17 8:18 ` [PUSHED 8/8] gdbserver: return tracked register status in regcache_raw_read_unsigned Tankut Baris Aktemur
2024-12-30 10:49 ` [PATCH v2 00/11] gdbserver: refactor regcache Tankut Baris Aktemur
2024-12-30 10:49 ` [PATCH v2 01/11] gdbserver: dump 'xx...x' in collect_register_as_string for unavailable register Tankut Baris Aktemur
2025-01-06 21:28 ` Simon Marchi
2025-01-09 8:35 ` Aktemur, Tankut Baris
2024-12-30 10:49 ` [PATCH v2 02/11] gdbserver: use inheritance to define tracepoint contexts Tankut Baris Aktemur
2025-01-06 21:46 ` Simon Marchi
2024-12-30 10:49 ` [PATCH v2 03/11] gdbserver: use inheritance more " Tankut Baris Aktemur
2025-01-07 4:40 ` Simon Marchi
2024-12-30 10:49 ` [PATCH v2 04/11] gdbserver: convert init_register_cache and new_register_cache into constructors Tankut Baris Aktemur
2025-01-07 4:51 ` Simon Marchi
2024-12-30 10:49 ` [PATCH v2 05/11] gdbserver: convert free_register_cache into a destructor of regcache Tankut Baris Aktemur
2025-01-07 4:53 ` Simon Marchi
2025-01-07 4:54 ` Simon Marchi
2024-12-30 10:49 ` [PATCH v2 06/11] gdbserver: use unique_ptr for thread_info's regcache Tankut Baris Aktemur
2024-12-30 10:49 ` [PATCH v2 07/11] gdbserver: introduce and use regcache::set_register_status Tankut Baris Aktemur
2025-01-07 5:01 ` Simon Marchi
2025-01-09 12:49 ` Aktemur, Tankut Baris
2024-12-30 10:49 ` [PATCH v2 08/11] gdbserver: use REG_UNKNOWN for a regcache's register statuses Tankut Baris Aktemur
2025-01-07 5:17 ` Simon Marchi
2024-12-30 10:49 ` [PATCH v2 09/11] gdbserver: define and use regcache::reset Tankut Baris Aktemur
2025-01-07 5:27 ` Simon Marchi
2024-12-30 10:49 ` [PATCH v2 10/11] gdbserver: refactor the definition and uses of supply_regblock Tankut Baris Aktemur
2025-01-07 5:34 ` Simon Marchi
2024-12-30 10:49 ` [PATCH v2 11/11] gdbserver: fix the declared type of register_status in regcache Tankut Baris Aktemur
2025-01-07 5: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=39a4774140afc2f7253756971398fc2cabceb289.1677582745.git.tankut.baris.aktemur@intel.com \
--to=gdb-patches@sourceware.org \
--cc=tankut.baris.aktemur@intel.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