From: Pedro Alves <pedro@codesourcery.com>
To: Doug Evans <dje@google.com>
Cc: Michael Snyder <msnyder@vmware.com>,
Marc Khouzam <marc.khouzam@ericsson.com>,
"gdb@sourceware.org" <gdb@sourceware.org>,
Greg Law <glaw@undo-software.com>, Hui Zhu <teawater@gmail.com>,
"gdb-patches ml" <gdb-patches@sourceware.org>
Subject: Re: PRecord sets memory even when it says it did not
Date: Mon, 14 Sep 2009 20:36:00 -0000 [thread overview]
Message-ID: <200909142135.58989.pedro@codesourcery.com> (raw)
In-Reply-To: <e394668d0909141204k5ebb4481uacbd70b67b5e6161@mail.gmail.com>
On Monday 14 September 2009 20:04:12, Doug Evans wrote:
> It seems like what's needed is to move
>
> /* Make sure the cache gets updated no matter what - if we are
> writing
> to the stack, even if this write is not tagged as such, we still
> need
> to update the cache. */
>
> if (inf != NULL
> && readbuf == NULL
> && !region->attrib.cache
> && stack_cache_enabled_p
> && object != TARGET_OBJECT_STACK_MEMORY)
> {
> dcache_update (target_dcache, memaddr, (void *) writebuf, reg_len);
> }
>
> to after the call
>
> res = ops->to_xfer_partial (ops, TARGET_OBJECT_MEMORY, NULL,
> readbuf, writebuf, memaddr, reg_len);
>
> predicated on res > 0.
>
> [dcache.c does the write first, and then updates the cache if it
> succeeded, we just need to do that here too, methinks]
That's fine with me as well.
There's one wrinkly corner case not being handled. If the to_xfer_partial
routine throws an error, say a ptrace error of some kind (usually
perror_with_name), the ops target may still have succeeded in writing a
part of that partial transfer, but, the matching caches lines aren't
being invalidated/committed. This is fine if we assume that errors
are only thrown before attempting any transfer at all, but that is not
reality. E.g., when xfering [1000, 2000) in a single go, that may
fail half way, say, at 1500 with a hard thrown error. Only thing 100%
safe to in these cases is to just flush the whole cache area that was
attempted to be written, or perhaps simpler, the whole cache. Not
something you'd see hapenning every day, but still something
to consider at some point.
--
Pedro Alves
next prev parent reply other threads:[~2009-09-14 20:36 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <F7CE05678329534C957159168FA70DEC5153600749@EUSAACMS0703.eamcs.ericsson.se>
2009-09-14 4:40 ` Hui Zhu
2009-09-14 13:52 ` Marc Khouzam
2009-09-14 17:17 ` Michael Snyder
2009-09-14 17:21 ` Marc Khouzam
2009-09-14 17:26 ` Michael Snyder
2009-09-14 15:53 ` Daniel Jacobowitz
2009-09-14 16:15 ` Hui Zhu
2009-09-14 17:10 ` Marc Khouzam
2009-09-14 17:10 ` Greg Law
2009-09-14 17:19 ` Marc Khouzam
2009-09-14 17:50 ` Pedro Alves
2009-09-14 17:54 ` Marc Khouzam
2009-09-14 18:00 ` Michael Snyder
2009-09-14 18:01 ` Pedro Alves
2009-09-14 18:02 ` Michael Snyder
2009-09-14 18:15 ` Pedro Alves
2009-09-14 18:21 ` Michael Snyder
2009-09-14 18:36 ` Pedro Alves
2009-09-14 19:04 ` Doug Evans
2009-09-14 19:08 ` Michael Snyder
2009-09-14 20:36 ` Pedro Alves [this message]
2009-09-14 21:08 ` Doug Evans
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=200909142135.58989.pedro@codesourcery.com \
--to=pedro@codesourcery.com \
--cc=dje@google.com \
--cc=gdb-patches@sourceware.org \
--cc=gdb@sourceware.org \
--cc=glaw@undo-software.com \
--cc=marc.khouzam@ericsson.com \
--cc=msnyder@vmware.com \
--cc=teawater@gmail.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