From: Douglas RAILLARD <douglas.raillard@arm.com>
To: acme@redhat.com
Cc: dwarves@vger.kernel.org, douglas.raillard@arm.com
Subject: [PATCH v2 0/6] improve expanded header
Date: Tue, 7 Dec 2021 17:31:45 +0000 [thread overview]
Message-ID: <20211207173151.2283946-1-douglas.raillard@arm.com> (raw)
From: Douglas Raillard <douglas.raillard@arm.com>
Improve headers generated with -E in a few ways:
* Print each type only once, to avoid redefinitions
* --forward_decl: Generate forward declaration for struct and union so
that uses of pointers will work.
* --expanded_prefix: Allow prefixing names of types added by -E (all
the ones not explicitly requested with -C) so they can be namespaced
manually. This is important in order to be able to mix
pahole-generated headers with existing headers without clash or
maintenance.
types.txt:
t1
t4
Original printed type with "-C types.txt -E":
struct t1 {
struct t2 *a;
struct t3 {
int a;
} b;
};
struct t4 {
struct t3 {
int a;
} a;
};
After this series and with
"-C types.txt -E --expanded_prefix __pahole --forward_decl":
struct t1
struct t2;
struct t3;
struct t1 {
struct t2 *a;
struct __pahole_t3 {
int a;
} b;
};
struct t4 {
struct __pahole_t3 a;
};
This header can be freely mixed with any other header as long as they
don't define t1 or t4 (if there is a clash, then pahole is not necessary
and the user can just use the header in the first place).
TODOs:
* Define types on their first use even when they are first used as
pointers. Currently, if a type is only used as pointer it will never
get defined, which will still compile thanks to --forward_decl but
won't allow easy use of the values.
* The prefix system allocates memory to rename types and never frees
it. I don't think it's a big issue for now as it's done inside
pahole.c and type names are likely necessary until the end of the
process anyway, but it makes valgrind angry and could therefore mask
other problems. There is another implementation of prefix that
modifies dwarves_fprintf.c instead of changing the name but it was
very invasive and impossible to check if prefixable spots were
missed.
This series is to be applied on the "next" branch as it includes reverts
of the --inner_anonymous series, which is dropped since it could not
cope with recursive types.
Douglas Raillard (6):
Revert "fprintf: Allow making struct/enum/union anonymous"
Revert "pahole.c: Add --inner_anonymous option"
fprintf: Print types only once
pahole.c: Add prefix to expanded type names
pahole.c: Add --expanded_prefix option
pahole.c: Add --forward_decl option
dwarves.h | 12 ++++--
dwarves_emit.c | 2 +-
dwarves_fprintf.c | 77 +++++++++++++++++-------------------
man-pages/pahole.1 | 8 ++--
pahole.c | 98 ++++++++++++++++++++++++++++++++++------------
5 files changed, 121 insertions(+), 76 deletions(-)
--
2.25.1
next reply other threads:[~2021-12-07 17:31 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-12-07 17:31 Douglas RAILLARD [this message]
2021-12-07 17:31 ` [PATCH v2 1/6] Revert "fprintf: Allow making struct/enum/union anonymous" Douglas RAILLARD
2021-12-07 17:31 ` [PATCH v2 2/6] Revert "pahole.c: Add --inner_anonymous option" Douglas RAILLARD
2021-12-07 17:31 ` [PATCH v2 3/6] fprintf: Print types only once Douglas RAILLARD
2021-12-14 14:02 ` Arnaldo Carvalho de Melo
2021-12-14 17:54 ` Douglas Raillard
2021-12-14 14:06 ` Arnaldo Carvalho de Melo
2021-12-14 18:23 ` Douglas Raillard
2021-12-17 18:40 ` Arnaldo Carvalho de Melo
2021-12-07 17:31 ` [PATCH v2 4/6] pahole.c: Add prefix to expanded type names Douglas RAILLARD
2021-12-14 14:55 ` Arnaldo Carvalho de Melo
2021-12-14 17:50 ` Douglas Raillard
2021-12-14 19:13 ` Arnaldo Carvalho de Melo
2021-12-14 19:18 ` Arnaldo Carvalho de Melo
2021-12-07 17:31 ` [PATCH v2 5/6] pahole.c: Add --expanded_prefix option Douglas RAILLARD
2021-12-07 17:31 ` [PATCH v2 6/6] pahole.c: Add --forward_decl option Douglas RAILLARD
2021-12-08 11:55 ` [PATCH v2 0/6] improve expanded header Arnaldo Carvalho de Melo
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=20211207173151.2283946-1-douglas.raillard@arm.com \
--to=douglas.raillard@arm.com \
--cc=acme@redhat.com \
--cc=dwarves@vger.kernel.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
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).