Linux-libre 5.3.12-gnu
[librecmc/linux-libre.git] / tools / testing / selftests / bpf / progs / btf_dump_test_case_padding.c
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 ----- */
10 struct 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
29 struct 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
48 struct 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  *};
66  *
67  */
68 /* ------ END-EXPECTED-OUTPUT ------ */
69
70 struct padded_cache_line {
71         int a;
72         int b __attribute__((aligned(32)));
73 };
74
75 /* ----- START-EXPECTED-OUTPUT ----- */
76 /*
77  *struct zone_padding {
78  *      char x[0];
79  *};
80  *
81  *struct zone {
82  *      int a;
83  *      short b;
84  *      short: 16;
85  *      struct zone_padding __pad__;
86  *};
87  *
88  */
89 /* ------ END-EXPECTED-OUTPUT ------ */
90
91 struct zone_padding {
92         char x[0];
93 } __attribute__((__aligned__(8)));
94
95 struct zone {
96         int a;
97         short b;
98         short: 16;
99         struct zone_padding __pad__;
100 };
101
102 int f(struct {
103         struct padded_implicitly _1;
104         struct padded_explicitly _2;
105         struct padded_a_lot _3;
106         struct padded_cache_line _4;
107         struct zone _5;
108 } *_)
109 {
110         return 0;
111 }