public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: "Ulrich Weigand" <uweigand@de.ibm.com>
To: dan@codesourcery.com (Daniel Jacobowitz)
Cc: ken@linux.vnet.ibm.com (Ken Werner),
	gdb-patches@sourceware.org,
	       brobecker@adacore.com (Joel Brobecker)
Subject: Re: [patch] fix pre-/post- in-/decrement
Date: Mon, 04 Oct 2010 21:58:00 -0000	[thread overview]
Message-ID: <201010042157.o94LvlhY018611@d12av02.megacenter.de.ibm.com> (raw)
In-Reply-To: <20101004204538.GA1052@caradoc.them.org> from "Daniel Jacobowitz" at Oct 04, 2010 04:45:44 PM

Daniel Jacobowitz wrote:
> Try this - it's easiest to see what's going on with set debug target
> 1, or else by using gdbserver and set debug remote 1 (the latter is
> easier for me to read).  I've edited out some reads relating to the
> stack frame.
> 
> (gdb) set $p = (int *) $sp
> (gdb) p *$p
> Sending packet: $m7fffffffdff0,4#2e...Packet received: 01000000
> $4 = 1
> (gdb) set *$p = 2
> Sending packet: $X7fffffffdff0,4:\002\000\000\000#55...Packet received: OK
> (gdb) print *$p = 1
> Sending packet: $X7fffffffdff0,4:\001\000\000\000#54...Packet received: OK
> Sending packet: $m7fffffffdff0,4#2e...Packet received: 01000000
> $5 = 1
> (gdb)
> 
> I suspect that your patch will be called to handle the value_assign
> for the set command, and it will result in an unnecessary read from
> the target.  You want the resulting value to be unwritable, but it can
> still be lazy; you don't need the value.
> 
> Of course, those two things are not orthogonal in GDB's current
> representation.  So I don't know how to do this.  But don't break the
> current behavior, please - it's important both for performance and for
> embedded correctness.

It would appear that even the current behavior, as shown in your trace,
already contains an unnecessary load.  There should be no need to perform
a memory read to evaluate "print *$p = 1".

In fact, value_assign contains code that apparently tries to avoid just
that, but it seems this no longer works as expected with lazy values:

  val = value_copy (toval);
  memcpy (value_contents_raw (val), value_contents (fromval),
          TYPE_LENGTH (type));
  deprecated_set_value_type (val, type);
  val = value_change_enclosing_type (val,
                                     value_enclosing_type (fromval));
  set_value_embedded_offset (val, value_embedded_offset (fromval));
  set_value_pointed_to_offset (val, value_pointed_to_offset (fromval));


Note that if "toval" was lazy, "val" is likewise lazy -- but then, its
contents are filled in, and are subsequently completely ignored because
the value is lazy.

The rest of this sequence seems dubious as well.  The type of "toval"
(and hence "val") will already be "type" -- modulo typedefs, but I
don't see why you'd want an assignment operator to remove typedefs.

Changing the enclosing type and embedded offset seems just wrong: the
constructed "val" contents will have only "toval"'s enclosing contents,
not "fromval"'s.  (In addition, if the enclosing types are actually
different, the value_change_enclosing_type will just completely wipe
out "val"'s contents again ...)

The pointed_to_offset call looks OK.  (I'm not sure whether the whole
pointed_to_offset logic is needed at all today, but I guess that's a
different topic ...)


I think the way to fix this problem would be to add a call to
  set_value_lazy (val, 0);
at this point -- we have filled in the contents, and thus the value
indeed is no longer lazy if it ever was.

This would -even without Ken's patch fix- the unnecessary read shown above,
and would have the additional effect that Ken's patch will introduce no
further reads from the target, as all values returned from value_assign
will already be non-lazy.

Thoughts?


Bye,
Ulrich

-- 
  Dr. Ulrich Weigand
  GNU Toolchain for Linux on System z and Cell BE
  Ulrich.Weigand@de.ibm.com

  reply	other threads:[~2010-10-04 21:58 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-17 12:58 [patch] GNU vector unop support Ken Werner
2010-09-28 16:04 ` Ken Werner
     [not found] ` <20100930185634.GC6213@adacore.com>
2010-10-01 17:45   ` [patch] fix pre-/post- in-/decrement Ken Werner
2010-10-04 13:01     ` Ulrich Weigand
2010-10-04 19:47       ` Ken Werner
2010-10-04 20:45         ` Daniel Jacobowitz
2010-10-04 21:58           ` Ulrich Weigand [this message]
2010-10-04 22:59             ` Daniel Jacobowitz
2010-10-04 23:25               ` Ulrich Weigand
2010-10-05  1:17                 ` Daniel Jacobowitz
2010-10-05 13:28                   ` Ulrich Weigand
2010-10-05 13:42                     ` Daniel Jacobowitz
2010-10-06 18:59                       ` [rfc] Fix value_assign return value (Re: [patch] fix pre-/post- in-/decrement) Ulrich Weigand
2010-10-26 13:42                         ` Daniel Jacobowitz
2010-12-01 16:51                           ` Ulrich Weigand
2010-10-06 20:55                       ` [patch] fix pre-/post- in-/decrement Vladimir Prus
2010-10-07 12:38         ` Ken Werner
2010-10-12 23:00           ` Tom Tromey
2010-10-13  8:45             ` Andreas Schwab
2010-10-13  9:23             ` Ken Werner
2010-10-13 16:07               ` Daniel Jacobowitz
2010-10-13 19:01               ` Tom Tromey
2010-10-19  7:38                 ` Ken Werner
2010-11-02  8:23                   ` Ken Werner
2010-11-02 20:31                   ` Tom Tromey
2010-11-03 13:52                     ` Ken Werner
2010-10-04 20:52   ` [patch] GNU vector unop support Ken Werner
2010-10-06 23:27     ` Joel Brobecker
2010-10-07 16:23       ` Ken Werner
2010-11-03 14:07       ` Ken Werner

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=201010042157.o94LvlhY018611@d12av02.megacenter.de.ibm.com \
    --to=uweigand@de.ibm.com \
    --cc=brobecker@adacore.com \
    --cc=dan@codesourcery.com \
    --cc=gdb-patches@sourceware.org \
    --cc=ken@linux.vnet.ibm.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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).