Dwarves Archive on lore.kernel.org
 help / color / Atom feed
From: "Ilpo Järvinen" <ilpo.jarvinen-pxSi+dnQzZMxHbG02/KK1g@public.gmane.org>
To: Arnaldo Carvalho de Melo <acme-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Cc: Zack Weinberg <zweinberg-4eJtQOnFJqFBDgjK7y7TUQ@public.gmane.org>,
	dwarves-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: Formatting "drivers" was Re: Can't persuade pahole to see through forward declarations
Date: Wed, 24 Jun 2009 09:29:26 +0300 (EEST)
Message-ID: <Pine.LNX.4.64.0906240918170.26611@melkinkari.cs.Helsinki.FI> (raw)
In-Reply-To: <20090618205053.GA4258-f8uhVLnGfZaxAyOMLChx1axOck334EZe@public.gmane.org>

On Thu, 18 Jun 2009, Arnaldo Carvalho de Melo wrote:

> Em Thu, Jun 18, 2009 at 01:28:20PM -0700, Zack Weinberg escreveu:
> > Arnaldo Carvalho de Melo <acme-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> wrote:
> > 
> > > > Also, I wonder if you could see your way clear to adding an
> > > > alternative output format that is easily machine-parseable?
> > > > Approximation-to-C-source format is nice for humans but I've spent
> > > > the past day and a bit writing a sed script to turn it into
> > > > something that I can do programmed analysis on and it was no fun.
> > > 
> > > How would it look like?
> > 
> > For the analysis I'm doing, the ideal format would be very flat and
> > line-oriented.  Consider this structure definition:
> > 
> > struct Foo {
> >   union {
> >     struct { int x; int y; } a;
> >     struct { float z; short y; } b;
> >     double c;
> >     void* d;
> >   } u;
> >   char n[4];
> >   void (*ptr)(int);
> >   void (*ptrs[2])(int);
> >   int bf:12;
> >   short bg:3;
> > };
> > 
> > I would like to get something like this (assuming LP64):
> > 
> > name|type|bytes|bits|byteoff|bitoff|cacheline
> > Foo|struct Foo|48|0|0|0|0
> > Foo.u|union|8|0|0|0|0
> > Foo.u.a|struct|8|0|0|0|0
> > Foo.u.a.x|int|4|0|0|0|0
> > Foo.u.a.y|int|4|0|4|0|0
> > Foo.u.b|struct|8|0|0|0|0
> > Foo.u.b.z|float|4|0|0|0|0
> > Foo.u.b.y|short int|2|0|4|0|0
> > Foo.u.b.<pad>|pad|2|0|6|0|0
> > Foo.u.c|double|8|0|0|0|0
> > Foo.u.d|void *|8|0|0|0|0
> > Foo.n|char[4]|4|0|8|0|0
> > Foo.<hole1>|pad|4|0|12|0|0
> > Foo.ptr|void(*)(int)|8|0|16|0|0
> > Foo.ptrs|void(*[2])(int)|16|0|24|0|0
> > Foo.bf|int|1|4|40|0|0
> > Foo.bg|short int|0|3|41|4|0
> > Foo.<pad>|pad|6|1|41|7|0
> > 
> > I suggest "|" for the field separator because I'm pretty sure it can't
> > appear in a C/C++ "abstract declaration" (i.e. the "type" field).  Tabs
> > are visually confusable with the spaces that you do occasionally need
> > in an abstract declaration.
> > 
> > The key properties of this are:
> > 
> >  - There is only one kind of record to process.
> >  - Each line can be examined in isolation, if you don't care about the
> >    nesting structure.
> >  - You do not have to process C declaration syntax to find the name of
> >    each field.

Good point, this is one of the most complex tasks in scripts to get 
general case right. Besides typedefs, especially those function pointers 
which appear in return value and arguments make it a task too hairy 
for any sane people, not that I'd say it is impossible... :-)

> >  - There is never missing data; in many cases pahole currently will
> >    omit the offset in its annotation of a full nested structure,
> >    for instance, which is fine for humans but really bad for machine
> >    processing.
> 
> Annoying "simplification", I'll put the offset there explicitely, just
> worried that Ilpo may be using it in his sed scripts... Ilpo?

No, I'm not. I usually try to avoid trusting such things anyway, unless I 
really have to. You just don't parse anything c-like with newlines / 
spaces as significant :-).


-- 
 i.
--
To unsubscribe from this list: send the line "unsubscribe dwarves" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply index

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20090615172409.6f0f322b@mozilla.com>
     [not found] ` <20090617170217.GB21530@ghostprotocols.net>
     [not found]   ` <20090617170217.GB21530-f8uhVLnGfZaxAyOMLChx1axOck334EZe@public.gmane.org>
2009-06-17 17:25     ` Zack Weinberg
     [not found]       ` <20090617102506.34aaf8e2-4eJtQOnFJqFBDgjK7y7TUQ@public.gmane.org>
2009-06-17 20:56         ` Arnaldo Carvalho de Melo
2009-06-18 18:36         ` Arnaldo Carvalho de Melo
     [not found]           ` <20090618183634.GE21530-f8uhVLnGfZaxAyOMLChx1axOck334EZe@public.gmane.org>
2009-06-18 20:28             ` Zack Weinberg
     [not found]               ` <20090618132820.2eb7371a-4eJtQOnFJqFBDgjK7y7TUQ@public.gmane.org>
2009-06-18 20:50                 ` Formatting "drivers" was " Arnaldo Carvalho de Melo
     [not found]                   ` <20090618205053.GA4258-f8uhVLnGfZaxAyOMLChx1axOck334EZe@public.gmane.org>
2009-06-24  6:29                     ` Ilpo Järvinen [this message]
     [not found]                       ` <Pine.LNX.4.64.0906240918170.26611-tOJ5Hk0ALFH+1EwMtL+0ZheBoQapMCRCVQQcQy+6Uvc@public.gmane.org>
2009-06-24  6:40                         ` Zack Weinberg
     [not found]                           ` <20090623234018.61f1ce02-4eJtQOnFJqFBDgjK7y7TUQ@public.gmane.org>
2009-06-24  6:58                             ` Ilpo Järvinen
2009-06-24  6:42                     ` Zack Weinberg

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=Pine.LNX.4.64.0906240918170.26611@melkinkari.cs.Helsinki.FI \
    --to=ilpo.jarvinen-pxsi+dnqzzmxhbg02/kk1g@public.gmane.org \
    --cc=acme-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=dwarves-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=zweinberg-4eJtQOnFJqFBDgjK7y7TUQ@public.gmane.org \
    /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

Dwarves Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/dwarves/0 dwarves/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 dwarves dwarves/ https://lore.kernel.org/dwarves \
		dwarves@vger.kernel.org
	public-inbox-index dwarves

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.dwarves


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git