From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 20484 invoked by alias); 19 Feb 2014 20:29:41 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 20382 invoked by uid 89); 19 Feb 2014 20:29:41 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.0 required=5.0 tests=AWL,BAYES_00,RP_MATCHES_RCVD,SPF_HELO_PASS,SPF_PASS,UNSUBSCRIBE_BODY autolearn=no version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 19 Feb 2014 20:29:40 +0000 Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id s1JKTcAN008805 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 19 Feb 2014 15:29:38 -0500 Received: from brno.lan (ovpn01.gateway.prod.ext.ams2.redhat.com [10.39.146.11]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id s1JKTamn025004 for ; Wed, 19 Feb 2014 15:29:37 -0500 From: Pedro Alves To: gdb-patches@sourceware.org Subject: [PATCH 1/7] remote-mips.c: Don't install a deprecated_xfer_memory method Date: Wed, 19 Feb 2014 20:29:00 -0000 Message-Id: <1392841775-19126-2-git-send-email-palves@redhat.com> In-Reply-To: <1392841775-19126-1-git-send-email-palves@redhat.com> References: <1392841775-19126-1-git-send-email-palves@redhat.com> X-SW-Source: 2014-02/txt/msg00609.txt.bz2 This removes another yet instance of a deprecated_xfer_memory user. Tested by building a --enable-targets=all gdb, on x86-64 Fedora 17. gdb/ 2014-02-19 Pedro Alves * remote-mips.c (mips_xfer_memory): Adjust as to_xfer_partial helper. (mips_xfer_partial): New function. (_initialize_remote_mips): Don't install a deprecated_xfer_memory hook. Install a to_xfer_partial hook. --- gdb/remote-mips.c | 65 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 24 deletions(-) diff --git a/gdb/remote-mips.c b/gdb/remote-mips.c index 4338ffa..383d31c 100644 --- a/gdb/remote-mips.c +++ b/gdb/remote-mips.c @@ -98,10 +98,11 @@ static int mips_fetch_word (CORE_ADDR addr, unsigned int *valp); static int mips_store_word (CORE_ADDR addr, unsigned int value, int *old_contents); -static int mips_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len, - int write, - struct mem_attrib *attrib, - struct target_ops *target); +static enum target_xfer_status mips_xfer_memory (gdb_byte *readbuf, + const gdb_byte *writebuf, + ULONGEST memaddr, + ULONGEST len, + ULONGEST *xfered_len); static void mips_files_info (struct target_ops *ignore); @@ -2141,18 +2142,17 @@ mips_store_word (CORE_ADDR addr, unsigned int val, int *old_contents) return 0; } -/* Read or write LEN bytes from inferior memory at MEMADDR, - transferring to or from debugger address MYADDR. Write to inferior - if SHOULD_WRITE is nonzero. Returns length of data written or - read; 0 for error. Note that protocol gives us the correct value - for a longword, since it transfers values in ASCII. We want the - byte values, so we have to swap the longword values. */ +/* Helper for mips_xfer_partial that handles memory transfers. + Arguments are like target_xfer_partial. Note that the protocol + gives us the correct value for a longword, since it transfers + values in ASCII. We want the byte values, so we have to swap the + longword values. */ static int mask_address_p = 1; -static int -mips_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len, int write, - struct mem_attrib *attrib, struct target_ops *target) +static enum target_xfer_status +mips_xfer_memory (gdb_byte *readbuf, const gdb_byte *writebuf, + ULONGEST memaddr, ULONGEST len, ULONGEST *xfered_len) { enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ()); int i; @@ -2173,7 +2173,7 @@ mips_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len, int write, /* Allocate buffer of that many longwords. */ buffer = alloca (count * 4); - if (write) + if (writebuf != NULL) { /* Fill start and end extra bytes of buffer with existing data. */ if (addr != memaddr || len < 4) @@ -2181,7 +2181,7 @@ mips_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len, int write, unsigned int val; if (mips_fetch_word (addr, &val)) - return 0; + return TARGET_XFER_E_IO; /* Need part of initial word -- fetch it. */ store_unsigned_integer (&buffer[0], 4, byte_order, val); @@ -2194,7 +2194,7 @@ mips_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len, int write, /* Need part of last word -- fetch it. FIXME: we do this even if we don't need it. */ if (mips_fetch_word (addr + (count - 1) * 4, &val)) - return 0; + return TARGET_XFER_E_IO; store_unsigned_integer (&buffer[(count - 1) * 4], 4, byte_order, val); @@ -2202,7 +2202,7 @@ mips_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len, int write, /* Copy data to be written over corresponding part of buffer. */ - memcpy ((char *) buffer + (memaddr & 3), myaddr, len); + memcpy ((char *) buffer + (memaddr & 3), writebuf, len); /* Write the entire buffer. */ @@ -2219,10 +2219,7 @@ mips_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len, int write, gdb_flush (gdb_stdout); } if (status) - { - errno = status; - return 0; - } + return TARGET_XFER_E_IO; /* FIXME: Do we want a QUIT here? */ } if (count >= 256) @@ -2236,18 +2233,38 @@ mips_xfer_memory (CORE_ADDR memaddr, gdb_byte *myaddr, int len, int write, unsigned int val; if (mips_fetch_word (addr, &val)) - return 0; + return TARGET_XFER_E_IO; store_unsigned_integer (&buffer[i * 4], 4, byte_order, val); QUIT; } /* Copy appropriate bytes out of the buffer. */ - memcpy (myaddr, buffer + (memaddr & 3), len); + memcpy (readbuf, buffer + (memaddr & 3), len); } return len; } +/* Target to_xfer_partial implementation. */ + +static enum target_xfer_status +mips_xfer_partial (struct target_ops *ops, enum target_object object, + const char *annex, gdb_byte *readbuf, + const gdb_byte *writebuf, ULONGEST offset, ULONGEST len, + ULONGEST *xfered_len) +{ + switch (object) + { + case TARGET_OBJECT_MEMORY: + return mips_xfer_memory (readbuf, writebuf, offset, len, xfered_len); + + default: + return ops->beneath->to_xfer_partial (ops->beneath, object, annex, + readbuf, writebuf, offset, len, + xfered_len); + } +} + /* Print info on this target. */ static void @@ -3623,7 +3640,7 @@ _initialize_remote_mips (void) mips_ops.to_fetch_registers = mips_fetch_registers; mips_ops.to_store_registers = mips_store_registers; mips_ops.to_prepare_to_store = mips_prepare_to_store; - mips_ops.deprecated_xfer_memory = mips_xfer_memory; + mips_ops.to_xfer_partial = mips_xfer_partial; mips_ops.to_files_info = mips_files_info; mips_ops.to_insert_breakpoint = mips_insert_breakpoint; mips_ops.to_remove_breakpoint = mips_remove_breakpoint; -- 1.7.11.7