[PATCH v2 0/6] improve expanded header

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux