This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH RFC] safe_read_memory_integer() return value...


Earlier today, I discovered that safe_read_memory_integer() was never
returning a non-zero value.  It appears to me from the its usage in
arm-tdep.c that it is intended to return zero if it fails to read the
target's memory, and a non-zero value if it is successful.  The
patch below changes safe_read_memory_integer to behave precisely
in this fashion.

An earlier (unposted) version of this patch used GDB_RC_OK instead of
the constant 1.  I changed my mind about using this constant after I
noticed that the return type of safe_read_memory_integer() and
do_captured_read_memory_integer() should change.  That would have
necessitated including gdb.h in corefile.c as well as in those files
which include gdbcore.h.  I decided that this was much too big of a
ripple.

If there are no objections, I'll commit this change tomorrow.

Kevin

	* corefile.c (do_captured_read_memory_integer): Return non-zero
	result.
	(safe_read_memory_integer): Copy result of memory read when
	status is non-zero.  Also, add comments.

Index: corefile.c
===================================================================
RCS file: /cvs/src/src/gdb/corefile.c,v
retrieving revision 1.18
diff -u -p -r1.18 corefile.c
--- corefile.c	6 Mar 2002 06:28:33 -0000	1.18
+++ corefile.c	29 May 2002 23:39:08 -0000
@@ -260,7 +260,10 @@ dis_asm_print_address (bfd_vma addr, str
   print_address (addr, info->stream);
 }
 
-/* Read an integer from debugged memory, given address and number of bytes.  */
+/* Argument / return result struct for use with
+   do_captured_read_memory_integer().  MEMADDR and LEN are filled in
+   by gdb_read_memory_integer().  RESULT is the contents that were
+   successfully read from MEMADDR of length LEN.  */
 
 struct captured_read_memory_integer_arguments
 {
@@ -269,6 +272,13 @@ struct captured_read_memory_integer_argu
   LONGEST result;
 };
 
+/* Helper function for gdb_read_memory_integer().  DATA must be a
+   pointer to a captured_read_memory_integer_arguments struct. 
+   Return 1 if successful.  Note that the catch_errors() interface
+   will return 0 if an error occurred while reading memory.  This
+   choice of return code is so that we can distinguish between
+   success and failure.  */
+
 static int
 do_captured_read_memory_integer (void *data)
 {
@@ -278,9 +288,13 @@ do_captured_read_memory_integer (void *d
 
   args->result = read_memory_integer (memaddr, len);
 
-  return 0;
+  return 1;
 }
 
+/* Read memory at MEMADDR of length LEN and put the contents in
+   RETURN_VALUE.  Return 0 if MEMADDR couldn't be read and non-zero
+   if successful.  */
+
 int
 safe_read_memory_integer (CORE_ADDR memaddr, int len, LONGEST *return_value)
 {
@@ -291,7 +305,7 @@ safe_read_memory_integer (CORE_ADDR mema
 
   status = catch_errors (do_captured_read_memory_integer, &args,
                         "", RETURN_MASK_ALL);
-  if (!status)
+  if (status)
     *return_value = args.result;
 
   return status;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]