From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7808 invoked by alias); 6 Nov 2003 22:32:18 -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 7755 invoked from network); 6 Nov 2003 22:32:15 -0000 Received: from unknown (HELO localhost.redhat.com) (207.219.125.105) by sources.redhat.com with SMTP; 6 Nov 2003 22:32:15 -0000 Received: from redhat.com (localhost [127.0.0.1]) by localhost.redhat.com (Postfix) with ESMTP id C81632B91; Thu, 6 Nov 2003 17:32:03 -0500 (EST) Message-ID: <3FAACBE3.3060104@redhat.com> Date: Thu, 06 Nov 2003 22:32:00 -0000 From: Andrew Cagney User-Agent: Mozilla/5.0 (X11; U; NetBSD macppc; en-US; rv:1.0.2) Gecko/20030820 X-Accept-Language: en-us, en MIME-Version: 1.0 To: "J. Johnston" Cc: Andrew Cagney , Daniel Jacobowitz , Kevin Buettner , Marcel Moolenaar , gdb-patches@sources.redhat.com Subject: [patch/rfc] Add child_to_xfer_partial; Was: ia64 portion of libunwind patch References: <3F986E31.8050201@redhat.com> <1031024175718.ZM3475@localhost.localdomain> <3F996D88.9060505@redhat.com> <1031024185625.ZM9827@localhost.localdomain> <3F9F0180.2010702@redhat.com> <20031029012833.GA11070@nevyn.them.org> <3FA043B2.6090401@redhat.com> <3FA7F97B.4090909@redhat.com> Content-Type: multipart/mixed; boundary="------------010409060706090807020106" X-SW-Source: 2003-11/txt/msg00107.txt.bz2 This is a multi-part message in MIME format. --------------010409060706090807020106 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Content-length: 752 Jeff, This adds a child_xfer_partial method to "inftarg.c". I've included a hook vis: > +#if 0 > + case TARGET_OBJECT_UNWIND_TABLE: > +#ifndef NATIVE_XFER_UNWIND_TABLE > +#define NATIVE_XFER_UNWIND_TABLE(OPS,OBJECT,ANNEX,WRITEBUF,READBUF,OFFSET,LEN) > (-1) > +#endif > + return NATIVE_XFER_UNWIND_TABLE (ops, object, annex, writebuf, > + readbuf, offset, len); > +#endif so that, in theory, all you need do is define that in the linux specific nm-*.h file. I think this will make plugging in additional xfer methods easier. How does it look? Anyone else? Andrew PS: You'll notice that it also contains lurking code to add support for an auxv transfer. PPS: Note that I need to better test it. --------------010409060706090807020106 Content-Type: text/plain; name="diffs" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="diffs" Content-length: 1925 2003-11-06 Andrew Cagney * inftarg.c (child_xfer_partial): New function (init_child_ops): Set "to_xfer_partial". Index: inftarg.c =================================================================== RCS file: /cvs/src/src/gdb/inftarg.c,v retrieving revision 1.18 diff -u -r1.18 inftarg.c --- inftarg.c 21 Sep 2003 01:26:45 -0000 1.18 +++ inftarg.c 6 Nov 2003 22:20:17 -0000 @@ -551,7 +551,45 @@ */ return NULL; } - + +/* Perform a partial transfer to/from the specified object. */ + +static LONGEST +child_xfer_partial (struct target_ops *ops, + enum target_object object, + const char *annex, const void *writebuf, + void *readbuf, ULONGEST offset, LONGEST len) +{ + switch (object) + { + case TARGET_OBJECT_MEMORY: + if (readbuf) + return child_xfer_memory (offset, readbuf, len, 0/*write*/, + NULL, ops); + if (writebuf) + return child_xfer_memory (offset, readbuf, len, 1/*write*/, + NULL, ops); + return -1; + +#if 0 + case TARGET_OBJECT_UNWIND_TABLE: +#ifndef NATIVE_XFER_UNWIND_TABLE +#define NATIVE_XFER_UNWIND_TABLE(OPS,OBJECT,ANNEX,WRITEBUF,READBUF,OFFSET,LEN) (-1) +#endif + return NATIVE_XFER_UNWIND_TABLE (ops, object, annex, writebuf, + readbuf, offset, len); +#endif + +#if 0 + case TARGET_OBJECT_AUXV: + return native_xfer_auxv (PIDGET (inferior_ptid), writebuf, readbuf, + offset, len); +#endif + + default: + return -1; + } +} #if !defined(CHILD_PID_TO_STR) char * @@ -578,6 +616,7 @@ child_ops.to_store_registers = store_inferior_registers; child_ops.to_prepare_to_store = child_prepare_to_store; child_ops.to_xfer_memory = child_xfer_memory; + child_ops.to_xfer_partial = child_xfer_partial; child_ops.to_files_info = child_files_info; child_ops.to_insert_breakpoint = memory_insert_breakpoint; child_ops.to_remove_breakpoint = memory_remove_breakpoint; --------------010409060706090807020106--