public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] gdbserver: allows agent_mem_read to return an error code
@ 2023-04-03 13:48 Andrew Burgess
  0 siblings, 0 replies; only message in thread
From: Andrew Burgess @ 2023-04-03 13:48 UTC (permalink / raw)
  To: gdb-cvs

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=0576dff20f052ab6d1ddba861235c7dc2584a145

commit 0576dff20f052ab6d1ddba861235c7dc2584a145
Author: Andrew Burgess <aburgess@redhat.com>
Date:   Thu Oct 20 10:58:02 2022 +0100

    gdbserver: allows agent_mem_read to return an error code
    
    Currently the gdbserver function agent_mem_read ignores any errors
    from calling read_inferior_memory.  This means that if there is an
    attempt to access invalid memory then this will appear to succeed.
    
    In this patch I update agent_mem_read so that if read_inferior_memory
    fails, agent_mem_read will return an error code.
    
    However, none of the callers of agent_mem_read actually check the
    return value, so this commit will have no effect on anything.  In the
    next commit I will update the users of agent_mem_read to check for the
    error code.
    
    I've also updated the header comments on agent_mem_read to better
    reflect what the function does, and its possible return values.

Diff:
---
 gdbserver/tracepoint.cc | 11 ++++-------
 gdbserver/tracepoint.h  |  9 +++++++--
 2 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/gdbserver/tracepoint.cc b/gdbserver/tracepoint.cc
index 3f60989e4c7..125a384ffb3 100644
--- a/gdbserver/tracepoint.cc
+++ b/gdbserver/tracepoint.cc
@@ -4914,8 +4914,7 @@ condition_true_at_tracepoint (struct tracepoint_hit_ctx *ctx,
   return (value ? 1 : 0);
 }
 
-/* Do memory copies for bytecodes.  */
-/* Do the recording of memory blocks for actions and bytecodes.  */
+/* See tracepoint.h.  */
 
 int
 agent_mem_read (struct eval_agent_expr_context *ctx,
@@ -4927,10 +4926,7 @@ agent_mem_read (struct eval_agent_expr_context *ctx,
 
   /* If a 'to' buffer is specified, use it.  */
   if (to != NULL)
-    {
-      read_inferior_memory (from, to, len);
-      return 0;
-    }
+    return read_inferior_memory (from, to, len);
 
   /* Otherwise, create a new memory block in the trace buffer.  */
   while (remaining > 0)
@@ -4951,7 +4947,8 @@ agent_mem_read (struct eval_agent_expr_context *ctx,
       memcpy (mspace, &blocklen, sizeof (blocklen));
       mspace += sizeof (blocklen);
       /* Record the memory block proper.  */
-      read_inferior_memory (from, mspace, blocklen);
+      if (read_inferior_memory (from, mspace, blocklen) != 0)
+	return 1;
       trace_debug ("%d bytes recorded", blocklen);
       remaining -= blocklen;
       from += blocklen;
diff --git a/gdbserver/tracepoint.h b/gdbserver/tracepoint.h
index 060d44d0033..1f40d7b5177 100644
--- a/gdbserver/tracepoint.h
+++ b/gdbserver/tracepoint.h
@@ -161,8 +161,13 @@ void gdb_agent_about_to_close (int pid);
 struct traceframe;
 struct eval_agent_expr_context;
 
-/* Do memory copies for bytecodes.  */
-/* Do the recording of memory blocks for actions and bytecodes.  */
+/* When TO is not NULL, do memory copies for bytecodes, read LEN bytes
+   starting at address FROM, and place the result in the buffer TO.
+   Return 0 on success, otherwise a non-zero error code.
+
+   When TO is NULL, do the recording of memory blocks for actions and
+   bytecodes into a new traceframe block.  Return 0 on success, otherwise,
+   return 1 if there is an error.  */
 
 int agent_mem_read (struct eval_agent_expr_context *ctx,
 		    unsigned char *to, CORE_ADDR from,

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2023-04-03 13:48 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-04-03 13:48 [binutils-gdb] gdbserver: allows agent_mem_read to return an error code Andrew Burgess

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).