From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 19760 invoked by alias); 30 May 2002 00:05:45 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 19741 invoked from network); 30 May 2002 00:05:43 -0000 Received: from unknown (HELO cygnus.com) (205.180.83.203) by sources.redhat.com with SMTP; 30 May 2002 00:05:43 -0000 Received: from romulus.sfbay.redhat.com (remus.sfbay.redhat.com [172.16.27.252]) by runyon.cygnus.com (8.8.7-cygnus/8.8.7) with ESMTP id RAA14074 for ; Wed, 29 May 2002 17:05:43 -0700 (PDT) Received: (from kev@localhost) by romulus.sfbay.redhat.com (8.11.6/8.11.6) id g4U05fu04673 for gdb-patches@sources.redhat.com; Wed, 29 May 2002 17:05:41 -0700 Date: Wed, 29 May 2002 17:23:00 -0000 From: Kevin Buettner Message-Id: <1020530000540.ZM4672@localhost.localdomain> To: gdb-patches@sources.redhat.com Subject: [PATCH RFC] safe_read_memory_integer() return value... MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-SW-Source: 2002-05/txt/msg01012.txt.bz2 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;