Loading...
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}
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 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
105/* ----- START-EXPECTED-OUTPUT ----- */
106struct padding_wo_named_members {
107 long: 64;
108 long: 64;
109};
110
111/* ------ END-EXPECTED-OUTPUT ------ */
112
113int f(struct {
114 struct padded_implicitly _1;
115 struct padded_explicitly _2;
116 struct padded_a_lot _3;
117 struct padded_cache_line _4;
118 struct zone _5;
119 struct padding_wo_named_members _6;
120} *_)
121{
122 return 0;
123}