From: Zack Weinberg <zweinberg-4eJtQOnFJqFBDgjK7y7TUQ@public.gmane.org> To: "Ilpo Järvinen" <ilpo.jarvinen-pxSi+dnQzZMxHbG02/KK1g@public.gmane.org> Cc: Arnaldo Carvalho de Melo <acme-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>, dwarves-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Subject: Re: Formatting "drivers" was Re: Can't persuade pahole to see through forward declarations Date: Tue, 23 Jun 2009 23:40:18 -0700 Message-ID: <20090623234018.61f1ce02@mozilla.com> (raw) In-Reply-To: <Pine.LNX.4.64.0906240918170.26611-tOJ5Hk0ALFH+1EwMtL+0ZheBoQapMCRCVQQcQy+6Uvc@public.gmane.org> "Ilpo Järvinen" <ilpo.jarvinen-pxSi+dnQzZMxHbG02/KK1g@public.gmane.org> wrote: > On Thu, 18 Jun 2009, Arnaldo Carvalho de Melo wrote: > > Em Thu, Jun 18, 2009 at 01:28:20PM -0700, Zack Weinberg escreveu: > > > - 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... :-) I used to hack gcc. I know *exactly* how hard it is to parse C declarations. :-) I had been doing okay, for the limited thing I am trying to do, with sed scripts to munge the pahole output into something that could be relatively easily parsed by a Python script, but then I ran into this construct: struct S { ... struct T { int a; } tee[2]; }; No hint that there are two copies of T embedded in S, here, until it's far too late to do anything about it (if you're a sed script). > > > - 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 actually have a patch for this one now :-) I looked harder at my data set and realized it only happens with unions. There's also a small typo fix in here, I was getting "classnsThing *" a lot... diff --git a/dwarves_fprintf.c b/dwarves_fprintf.c index e3e621f..bbc5dd6 100644 --- a/dwarves_fprintf.c +++ b/dwarves_fprintf.c @@ -319,7 +319,7 @@ static const char *tag__prefix(const struct cu *cu, const uint32_t tag) case DW_TAG_structure_type: return cu->language == DW_LANG_C_plus_plus ? "class " : "struct "; - case DW_TAG_class_type: return "class"; + case DW_TAG_class_type: return "class "; case DW_TAG_union_type: return "union "; case DW_TAG_pointer_type: return " *"; case DW_TAG_reference_type: return " &"; @@ -679,6 +679,7 @@ static size_t union_member__fprintf(struct class_member *self, const struct conf_fprintf *conf, FILE *fp) { const size_t size = self->byte_size; + const size_t offset = conf->base_offset; size_t printed = type__fprintf(type, cu, s(cu, self->name), conf, fp); if ((tag__is_union(type) || tag__is_struct(type) || @@ -693,17 +694,17 @@ static size_t union_member__fprintf(struct class_member *self, * '} member_name;' last line of the type printed in the * above call to type__fprintf. */ - printed += fprintf(fp, ";%*s/* %11zd */", + printed += fprintf(fp, ";%*s/* %5zd %5zd */", (conf->type_spacing + - conf->name_spacing - slen - 3), " ", size); + conf->name_spacing - slen - 3), " ", offset, size); } } else { printed += fprintf(fp, ";"); if (!conf->suppress_offset_comment) { const int spacing = conf->type_spacing + conf->name_spacing - printed; - printed += fprintf(fp, "%*s/* %11zd */", - spacing > 0 ? spacing : 0, " ", size); + printed += fprintf(fp, "%*s/* %5zd %5zd */", + spacing > 0 ? spacing : 0, " ", offset, size); } } -- 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
next prev 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 [not found] ` <Pine.LNX.4.64.0906240918170.26611-tOJ5Hk0ALFH+1EwMtL+0ZheBoQapMCRCVQQcQy+6Uvc@public.gmane.org> 2009-06-24 6:40 ` Zack Weinberg [this message] [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=20090623234018.61f1ce02@mozilla.com \ --to=zweinberg-4ejtqonfjqfbdgjk7y7tuq@public.gmane.org \ --cc=acme-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \ --cc=dwarves-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \ --cc=ilpo.jarvinen-pxSi+dnQzZMxHbG02/KK1g@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