Mirror of the gdb mailing list
 help / color / mirror / Atom feed
From: Phil Muldoon <pmuldoon@redhat.com>
To: Zack Weinberg <zackw@panix.com>,
	libc-alpha@sourceware.org, gdb@sourceware.org
Cc: joseph@codesourcery.com, fweimer@redhat.com, tom@tromey.com,
	siddhesh@gotplt.org
Subject: Re: [RFC PATCH 0/3] Pretty-printing for errno
Date: Thu, 29 Jun 2017 15:48:00 -0000	[thread overview]
Message-ID: <b2e7bc3b-d914-37ec-0215-2937949a848c@redhat.com> (raw)
In-Reply-To: <20170622224456.1358-1-zackw@panix.com>

On 22/06/17 23:44, Zack Weinberg wrote:
> I say 'attempts' because it only _almost_ works, but the remaining
> problems appear to be GDB bugs.  The most important of these is that
> if error_t is a typedef name for int,
> 
> (gdb) p (error_t) 1
> 
> will _not_ invoke the pretty-printer for error_t.  Bizarrely, the same
> pretty-printer _does_ get invoked when you print an _array_ of error_t
> quantities.

Zack,

I found some time to look at this and I wanted to make sure this is
(or is not) a GDB bug. I cooked up a really simple testcase:

typedef int test_i;

int main ()
{
  test_i i = 1;

  return 0;
}

ptype shows i as type int.
whatis shows i as type test_i.

(gdb) ptype i
type = int
(gdb) whatis i
type = test_i

Both are correct as ptype always unrolls types.

I looked at the pretty printer registration and lookup mechanics in
GDB and looked at the value and type coming into the lookup
function. I wanted to make sure the type is not being unrolled before
being searched through the printers. It is not. In printers.py in the
class RegexpCollectionPrettyPrinter and invoked through the __call__
function we see the typename as so (this is just output from a
temporary print statement):

('typename: ', 'test_i')

So the printer registered against a typedef type should get
called.  But similar to your experience, I get
this for a value cast on the command line:

(gdb) p (test_i) 1
$1 = ('typename: ', 'int')

Which again is odd. I thought it might have something to do with
temporary values (i.e. 1 exists for a moment, but is not in the
inferior). So I tried:

(gdb) p (test_i) i
$2 = ('typename: ', 'int')

Which is most puzzling.

In summary, typedefs are accounted for normal and non-casting
operations in pretty printing (i.e. print i). The typedef error_t
should trigger the error_t pretty printer as registered. The situation
for casting operations on the command line reverting to an unrolled
type is puzzling to me and hopefully somebody can explain why this is
so.

I'll hack on this for a little bit and
see if there are other things I can find.

Cheers

Phil


  parent reply	other threads:[~2017-06-29 15:48 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-22 22:45 Zack Weinberg
2017-06-22 22:45 ` [PATCH 1/3] Improve testing of GDB pretty-printers Zack Weinberg
2017-06-22 22:46 ` [PATCH 2/3] Make error_t always int; make __errno_location return an __error_t Zack Weinberg
2017-06-22 22:46 ` [PATCH 3/3] Add pretty-printer for errno Zack Weinberg
2017-06-29 15:48 ` Phil Muldoon [this message]
2017-06-29 16:53   ` [RFC PATCH 0/3] Pretty-printing " Pedro Alves
2017-06-29 17:02     ` Pedro Alves
2017-06-29 17:28       ` Pedro Alves
2017-06-30  0:28         ` Zack Weinberg
2017-06-30 16:38           ` Pedro Alves
2017-06-30 16:47             ` Pedro Alves
2017-06-30 17:27             ` Zack Weinberg
2017-06-30 18:11               ` Pedro Alves
2017-07-01 11:56                 ` Pedro Alves
2017-07-13  2:30                 ` Pedro Alves
2017-09-04 21:25                   ` Pedro Alves
2017-09-05 21:15                     ` Zack Weinberg
2017-09-05 22:32                       ` Pedro Alves
2017-09-06 13:05                         ` Zack Weinberg
2017-09-06 13:32                           ` Pedro Alves
2017-09-06 21:03                             ` Zack Weinberg
     [not found]                               ` <2432779a-f146-1612-236e-84dde15c5d01@redhat.com>
2017-09-13 11:22                                 ` Using libthread_db.so with single-threaded programs, for TLS access (was: Re: [RFC PATCH 0/3] Pretty-printing for errno) Pedro Alves
2017-09-13 19:27                                   ` Philippe Waroquiers
2017-09-14  0:02                                   ` Using libthread_db.so with single-threaded programs, for TLS access Pedro Alves
2017-09-18 13:17                                     ` Carlos O'Donell
2017-09-18 14:28                                       ` Pedro Alves
2017-07-01 14:35               ` [RFC PATCH 0/3] Pretty-printing for errno Siddhesh Poyarekar
2017-07-04 15:54                 ` Pedro Alves

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=b2e7bc3b-d914-37ec-0215-2937949a848c@redhat.com \
    --to=pmuldoon@redhat.com \
    --cc=fweimer@redhat.com \
    --cc=gdb@sourceware.org \
    --cc=joseph@codesourcery.com \
    --cc=libc-alpha@sourceware.org \
    --cc=siddhesh@gotplt.org \
    --cc=tom@tromey.com \
    --cc=zackw@panix.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