pahole: Complete list of base type names

clang seems to generate base type with name "short", instead of "short
in", but it also isn't inconceivable to imagine other compilers
generating just "long" and/or "long long". This patch adds all those
short forms to a list of base type names.

  $ cat type_test.c
  struct s {
      short x1;
      long x2;
      long long x3;
  };

  int main() {
      struct s s;
      return 0;
  }

  $ clang -g type_test.c -o type_test && ~/local/pahole/build/pahole -JV type_test
  File type_test:
  [1] INT int size=4 bit_offset=0 nr_bits=32 encoding=SIGNED
  [2] STRUCT s kind_flag=0 size=24 vlen=3
          x1 type_id=3 bits_offset=0
          x2 type_id=4 bits_offset=64
          x3 type_id=5 bits_offset=128
  [3] INT short size=2 bit_offset=0 nr_bits=16 encoding=SIGNED
  [4] INT long int size=8 bit_offset=0 nr_bits=64 encoding=SIGNED
  [5] INT long long int size=8 bit_offset=0 nr_bits=64 encoding=SIGNED

Before:

  $ ~/local/pahole/build/pahole -F btf type_test
  base_type__name_to_size: base_type short
  class__fixup_btf_bitfields: unknown base type name "short"!
  struct s {
          short                      x1;                   /*     0     0 */

          /* XXX 8 bytes hole, try to pack */

          long int                   x2;                   /*     8     8 */
          long long int              x3;                   /*    16     8 */

          /* size: 24, cachelines: 1, members: 3 */
          /* sum members: 16, holes: 1, sum holes: 8 */
          /* last cacheline: 24 bytes */
  };

After:

  $ ~/local/pahole/build/pahole -F btf type_test
  struct s {
          short                      x1;                   /*     0     2 */

          /* XXX 6 bytes hole, try to pack */

          long int                   x2;                   /*     8     8 */
          long long int              x3;                   /*    16     8 */

          /* size: 24, cachelines: 1, members: 3 */
          /* sum members: 18, holes: 1, sum holes: 6 */
          /* last cacheline: 24 bytes */
  };

Signed-off-by: Andrii Nakryiko <andriin@fb.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Alexei Starovoitov <ast@fb.com>
Cc: Yonghong Song <yhs@fb.com>
Cc: bpf@vger.kernel.org
Cc: dwarves@vger.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
Andrii Nakryiko 2019-02-20 12:57:31 -08:00 committed by Arnaldo Carvalho de Melo
parent 6bcf0bd703
commit 7daa4300d2
1 changed files with 3 additions and 0 deletions

View File

@ -147,11 +147,13 @@ static struct base_type_name_to_size {
{ .name = "signed short", .size = 16, },
{ .name = "unsigned short", .size = 16, },
{ .name = "short int", .size = 16, },
{ .name = "short", .size = 16, },
{ .name = "char", .size = 8, },
{ .name = "signed char", .size = 8, },
{ .name = "unsigned char", .size = 8, },
{ .name = "signed long", .size = 0, },
{ .name = "long int", .size = 0, },
{ .name = "long", .size = 0, },
{ .name = "signed long", .size = 0, },
{ .name = "unsigned long", .size = 0, },
{ .name = "long unsigned int", .size = 0, },
@ -159,6 +161,7 @@ static struct base_type_name_to_size {
{ .name = "_Bool", .size = 8, },
{ .name = "long long unsigned int", .size = 64, },
{ .name = "long long int", .size = 64, },
{ .name = "long long", .size = 64, },
{ .name = "signed long long", .size = 64, },
{ .name = "unsigned long long", .size = 64, },
{ .name = "double", .size = 64, },