Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Andrew Cagney <ac131313@redhat.com>
To: Kevin Buettner <kevinb@redhat.com>
Cc: gdb-patches@sources.redhat.com
Subject: Re: [patch/rfc] to_read/write_partial -> to_xfer_partial
Date: Tue, 28 Oct 2003 15:49:00 -0000	[thread overview]
Message-ID: <3F9D472A.4010205@redhat.com> (raw)
In-Reply-To: <1031027204631.ZM31164@localhost.localdomain>

> On Oct 27,  3:25pm, Andrew Cagney wrote:
> 
> 
>> Per: http://sources.redhat.com/ml/gdb-patches/2003-10/msg00641.html
> 
>> > Having taken the change to this point, I'm now wondering if the read/write partial methods should be merged into:
>> > to_xfer_partial (targ, object, annex,
>> > offset, len,
>> > readbuf, writebuf)
>> > as that would make migrating existing targets easier.
> 
>> 
>> Having implemented bfd-target and remote-target versions 
>> to_read/write_partial, I think this switch is going to make life easier. 
> 
> 
> Could you offer a few more details on why you think that merging the
> read/write methods into a single xfer method will make it easier to
> migrate existing targets?

There's a tradeoff.  You'll notice that I started out with separate 
asthetically pleasing read/write methods, but eventually decided the 
cost was too high.

- the existing targets implement a memory centric "xfer".  Its going to 
be easier [for me] to convert that code to this new xfer variant.

- both the read and write paths use identical buffer overflow logic, and 
its that logic which contains the nasty edge cases and consequent bugs. 
  Compare target_read and target_write:

   LONGEST xfered = 0;
   while (xfered < len)
     {
       LONGEST xfer = target_read_partial (ops, object, annex,
                                           (bfd_byte *) buf + xfered,
                                           offset + xfered, len - xfered);
       /* Call an observer, notifying them of the xfer progress?  */
       if (xfer <= 0)
         /* Call memory_error?  */
         return -1;
       xfered += xfer;
       QUIT;
     }
   return len;

and

   LONGEST xfered = 0;
   while (xfered < len)
     {
       LONGEST xfer = target_write_partial (ops, object, annex,
                                            (bfd_byte *) buf + xfered,
                                            offset + xfered, len - xfered);
       /* Call an observer, notifying them of the xfer progress?  */
       if (xfer <= 0)
         /* Call memory_error?  */
         return -1;
       xfered += xfer;
       QUIT;
     }
   return len;

In testing this interface I had to fix similar but not identical bugs in 
both paths.

- If this were OO, I'd be doing it differently :-/

- unlike the memory xfer method, this one takes an explicit read and 
write buffer - the problem of casting away "const" is avoided.

- the core code doesn't need to be aware of this target internal detail, 
continuing to use more sane read/write methods.

enjoy,
Andrew



  parent reply	other threads:[~2003-10-28 15:49 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-10-27 20:25 Andrew Cagney
2003-10-27 20:46 ` Kevin Buettner
2003-10-27 22:29   ` Mark Kettenis
2003-10-28 15:49   ` Andrew Cagney [this message]
2003-10-28 22:11     ` Kevin Buettner
2003-10-29  0:03       ` Andrew Cagney
2003-10-29  5:15         ` Kevin Buettner
2003-10-31 16:13 ` Andrew Cagney

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3F9D472A.4010205@redhat.com \
    --to=ac131313@redhat.com \
    --cc=gdb-patches@sources.redhat.com \
    --cc=kevinb@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox