From: Andrew Cagney <cagney@gnu.org>
To: Daniel Jacobowitz <drow@mvista.com>
Cc: gdb-patches@sources.redhat.com
Subject: Re: [RFC]: remove inconsistency in printcmd.c: print_scalar_formatted
Date: Tue, 20 Jan 2004 21:29:00 -0000 [thread overview]
Message-ID: <400D9DAF.3020506@gnu.org> (raw)
In-Reply-To: <20040120054836.GA23548@nevyn.them.org>
>
> My point is that we can _change_ the behavior of print. I think that
> it is reasonable for the process to be something like this:
> print /format expression
> Evaluate expression
> Expression has a type
> Examine the value of that type according to /format
> [interpret its bits as a double, or as hex, or whatever...]
>
> This isn't the first time this has come up, Jim (?) made a similar
> suggestion some time ago for the case of ObjC. I think that I
> disagreed with it at the time, but I've got a history of being
> inconsistent.
>
> Think about it. What use do these have:
> p/f int_var
> p/x double_var
>
> None that I can see. p (double) int_var is obviously <int_var>.0 in C,
> and p/x (int) double_var is obviously 0x<truncate(double_var)>, but the
> format specifiers don't add value.
Apparent lack of value is not a bug. Often its a sign of well thought
out design.
Consider:
struct st { int i:12; j:4; short s } stv = { 1, 2, 3 };
(something that is currently causing the linux kernel grief - GCC 3.4
finally rejects typeof stv.i). For:
(gdb) print stv
{ 1, 2, 3}
(gdb) print/f stv
{ 1.0, 2.0, 3.0 }
GDB interprets stv.i and stv.j as _abstract_ values and then formats and
displays them accordingly. At the same time for:
(gdb) x/b &stv
0x1234000: 0x00120003
GDB displays the bits used in the underlying representation of stv.
The thing that is missing here, and I suspect at the time this code was
written was never thought to be a problem so ignored, is a mechanism for
examining / manipulating the underlying representation of a value that
is not sequentially laid out in memory. For instance:
(gdb) ptype v
vector int i[4]
(gdb) print &v[1] - &v[0]
1
should always work (that's valid C), only it doesn't when the value
isn't in memory:
(gdb) print &$mm0.v8_int8[1] - &$mm0.v8_int8[0]
Attempt to take address of value not located in memory.
Similarly, it should be possible to interpret the underlying
representation of an arbitrary value vis (Eli, yes, /v doesn't exist):
(gdb) x/8c &$mm0
(gdb) x/f &$mm0.v2_int32[1]
or with a new /v[alue] option (for want of a better letter):
(gdb) x/8vc $mm0
but I suspect that getting & working, while harder, would be better.
Andrew
> Here's some value they could add.
> Now, for ints vs. pointers it may be a little messier.
>
> This might even let me solve a long-standing complaint. Given $r1 =
> 0x62636566, I'd love to have a way to make gdb print "bcef". Or "fceb"
> or whatever else. p/s $r1? p/x 0x62636566? Examine does an implicit
> dereference and print doesn't, so this seems like a logical use of
> printf.
>
next prev parent reply other threads:[~2004-01-20 21:29 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-12-12 20:36 Jeff Johnston
2003-12-12 22:17 ` Kevin Buettner
2003-12-12 23:05 ` Daniel Jacobowitz
2003-12-13 0:55 ` J. Johnston
2004-01-19 22:23 ` J. Johnston
2004-01-19 22:57 ` Andrew Cagney
2004-01-19 23:18 ` Daniel Jacobowitz
2004-01-19 23:27 ` Kevin Buettner
2004-01-20 0:41 ` Andrew Cagney
2004-01-20 1:22 ` Daniel Jacobowitz
[not found] ` <400C8CC0.3040706@gnu.org>
2004-01-20 5:48 ` Daniel Jacobowitz
2004-01-20 6:55 ` Eli Zaretskii
2004-01-20 14:52 ` Daniel Jacobowitz
2004-01-20 19:15 ` Eli Zaretskii
2004-01-20 19:33 ` Daniel Jacobowitz
2004-01-20 20:32 ` Eli Zaretskii
2004-01-20 16:50 ` Andrew Cagney
2004-01-20 19:10 ` Eli Zaretskii
2004-01-20 21:29 ` Andrew Cagney [this message]
2004-02-19 22:53 ` Jeff Johnston
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=400D9DAF.3020506@gnu.org \
--to=cagney@gnu.org \
--cc=drow@mvista.com \
--cc=gdb-patches@sources.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