From: Douglas Raillard <douglas.raillard@xxxxxxx> 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