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
next prev 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