linux/tools/testing/selftests/bpf/progs/btf_dump_test_case_padding.c
<<
>>
Prefs
   1// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
   2
   3/*
   4 * BTF-to-C dumper tests for implicit and explicit padding between fields and
   5 * at the end of a struct.
   6 *
   7 * Copyright (c) 2019 Facebook
   8 */
   9/* ----- START-EXPECTED-OUTPUT ----- */
  10struct padded_implicitly {
  11        int a;
  12        long int b;
  13        char c;
  14};
  15
  16/* ------ END-EXPECTED-OUTPUT ------ */
  17
  18/* ----- START-EXPECTED-OUTPUT ----- */
  19/*
  20 *struct padded_explicitly {
  21 *      int a;
  22 *      int: 32;
  23 *      int b;
  24 *};
  25 *
  26 */
  27/* ------ END-EXPECTED-OUTPUT ------ */
  28
  29struct padded_explicitly {
  30        int a;
  31        int: 1; /* algo will explicitly pad with full 32 bits here */
  32        int b;
  33};
  34
  35/* ----- START-EXPECTED-OUTPUT ----- */
  36/*
  37 *struct padded_a_lot {
  38 *      int a;
  39 *      long: 32;
  40 *      long: 64;
  41 *      long: 64;
  42 *      int b;
  43 *};
  44 *
  45 */
  46/* ------ END-EXPECTED-OUTPUT ------ */
  47
  48struct padded_a_lot {
  49        int a;
  50        /* 32 bit of implicit padding here, which algo will make explicit */
  51        long: 64;
  52        long: 64;
  53        int b;
  54};
  55
  56/* ----- START-EXPECTED-OUTPUT ----- */
  57/*
  58 *struct padded_cache_line {
  59 *      int a;
  60 *      long: 32;
  61 *      long: 64;
  62 *      long: 64;
  63 *      long: 64;
  64 *      int b;
  65 *      long: 32;
  66 *      long: 64;
  67 *      long: 64;
  68 *      long: 64;
  69 *};
  70 *
  71 */
  72/* ------ END-EXPECTED-OUTPUT ------ */
  73
  74struct padded_cache_line {
  75        int a;
  76        int b __attribute__((aligned(32)));
  77};
  78
  79/* ----- START-EXPECTED-OUTPUT ----- */
  80/*
  81 *struct zone_padding {
  82 *      char x[0];
  83 *};
  84 *
  85 *struct zone {
  86 *      int a;
  87 *      short b;
  88 *      short: 16;
  89 *      struct zone_padding __pad__;
  90 *};
  91 *
  92 */
  93/* ------ END-EXPECTED-OUTPUT ------ */
  94
  95struct zone_padding {
  96        char x[0];
  97} __attribute__((__aligned__(8)));
  98
  99struct zone {
 100        int a;
 101        short b;
 102        struct zone_padding __pad__;
 103};
 104
 105int f(struct {
 106        struct padded_implicitly _1;
 107        struct padded_explicitly _2;
 108        struct padded_a_lot _3;
 109        struct padded_cache_line _4;
 110        struct zone _5;
 111} *_)
 112{
 113        return 0;
 114}
 115