Linux Audio

Check our new training course

Loading...
v6.13.7
  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 *	long: 0;
 23 *	int b;
 24 *};
 25 *
 26 */
 27/* ------ END-EXPECTED-OUTPUT ------ */
 28
 29struct padded_explicitly {
 30	int a;
 31	int: 1; /* algo will emit aligning `long: 0;` here */
 32	int b;
 33};
 34
 35/* ----- START-EXPECTED-OUTPUT ----- */
 36struct padded_a_lot {
 37	int a;
 38	long: 64;
 39	long: 64;
 40	int b;
 41};
 42
 43/* ------ END-EXPECTED-OUTPUT ------ */
 44
 45/* ----- START-EXPECTED-OUTPUT ----- */
 46/*
 47 *struct padded_cache_line {
 48 *	int a;
 49 *	long: 64;
 50 *	long: 64;
 51 *	long: 64;
 52 *	int b;
 53 *	long: 64;
 54 *	long: 64;
 55 *	long: 64;
 56 *};
 57 *
 58 */
 59/* ------ END-EXPECTED-OUTPUT ------ */
 60
 61struct padded_cache_line {
 62	int a;
 63	int b __attribute__((aligned(32)));
 64};
 65
 66/* ----- START-EXPECTED-OUTPUT ----- */
 67/*
 68 *struct zone_padding {
 69 *	char x[0];
 70 *};
 71 *
 72 *struct zone {
 73 *	int a;
 74 *	short b;
 75 *	long: 0;
 76 *	struct zone_padding __pad__;
 77 *};
 78 *
 79 */
 80/* ------ END-EXPECTED-OUTPUT ------ */
 81
 82struct zone_padding {
 83	char x[0];
 84} __attribute__((__aligned__(8)));
 85
 86struct zone {
 87	int a;
 88	short b;
 89	struct zone_padding __pad__;
 90};
 91
 92/* ----- START-EXPECTED-OUTPUT ----- */
 93struct padding_wo_named_members {
 94	long: 64;
 95	long: 64;
 96};
 97
 98struct padding_weird_1 {
 99	int a;
100	long: 64;
101	short: 16;
102	short b;
103};
104
105/* ------ END-EXPECTED-OUTPUT ------ */
106
107/* ----- START-EXPECTED-OUTPUT ----- */
108/*
109 *struct padding_weird_2 {
110 *	long: 56;
111 *	char a;
112 *	long: 56;
113 *	char b;
114 *	char: 8;
115 *};
116 *
117 */
118/* ------ END-EXPECTED-OUTPUT ------ */
119struct padding_weird_2 {
120	int: 32;	/* these paddings will be collapsed into `long: 56;` */
121	short: 16;
122	char: 8;
123	char a;
124	int: 32;	/* these paddings will be collapsed into `long: 56;` */
125	short: 16;
126	char: 8;
127	char b;
128	char: 8;
129};
130
131/* ----- START-EXPECTED-OUTPUT ----- */
132struct exact_1byte {
133	char x;
134};
135
136struct padded_1byte {
137	char: 8;
138};
139
140struct exact_2bytes {
141	short x;
142};
143
144struct padded_2bytes {
145	short: 16;
146};
147
148struct exact_4bytes {
149	int x;
150};
151
152struct padded_4bytes {
153	int: 32;
154};
155
156struct exact_8bytes {
157	long x;
158};
159
160struct padded_8bytes {
161	long: 64;
162};
163
164struct ff_periodic_effect {
165	int: 32;
166	short magnitude;
167	long: 0;
168	short phase;
169	long: 0;
170	int: 32;
171	int custom_len;
172	short *custom_data;
173};
174
175struct ib_wc {
176	long: 64;
177	long: 64;
178	int: 32;
179	int byte_len;
180	void *qp;
181	union {} ex;
182	long: 64;
183	int slid;
184	int wc_flags;
185	long: 64;
186	char smac[6];
187	long: 0;
188	char network_hdr_type;
189};
190
191struct acpi_object_method {
192	long: 64;
193	char: 8;
194	char type;
195	short reference_count;
196	char flags;
197	short: 0;
198	char: 8;
199	char sync_level;
200	long: 64;
201	void *node;
202	void *aml_start;
203	union {} dispatch;
204	long: 64;
205	int aml_length;
206};
207
208struct nested_unpacked {
209	int x;
210};
211
212struct nested_packed {
213	struct nested_unpacked a;
214	char c;
215} __attribute__((packed));
216
217struct outer_mixed_but_unpacked {
218	struct nested_packed b1;
219	short a1;
220	struct nested_packed b2;
221};
222
223/* ------ END-EXPECTED-OUTPUT ------ */
224
225int f(struct {
226	struct padded_implicitly _1;
227	struct padded_explicitly _2;
228	struct padded_a_lot _3;
229	struct padded_cache_line _4;
230	struct zone _5;
231	struct padding_wo_named_members _6;
232	struct padding_weird_1 _7;
233	struct padding_weird_2 _8;
234	struct exact_1byte _100;
235	struct padded_1byte _101;
236	struct exact_2bytes _102;
237	struct padded_2bytes _103;
238	struct exact_4bytes _104;
239	struct padded_4bytes _105;
240	struct exact_8bytes _106;
241	struct padded_8bytes _107;
242	struct ff_periodic_effect _200;
243	struct ib_wc _201;
244	struct acpi_object_method _202;
245	struct outer_mixed_but_unpacked _203;
246} *_)
247{
248	return 0;
249}
v6.8
  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 *	long: 0;
 23 *	int b;
 24 *};
 25 *
 26 */
 27/* ------ END-EXPECTED-OUTPUT ------ */
 28
 29struct padded_explicitly {
 30	int a;
 31	int: 1; /* algo will emit aligning `long: 0;` here */
 32	int b;
 33};
 34
 35/* ----- START-EXPECTED-OUTPUT ----- */
 36struct padded_a_lot {
 37	int a;
 38	long: 64;
 39	long: 64;
 40	int b;
 41};
 42
 43/* ------ END-EXPECTED-OUTPUT ------ */
 44
 45/* ----- START-EXPECTED-OUTPUT ----- */
 46/*
 47 *struct padded_cache_line {
 48 *	int a;
 49 *	long: 64;
 50 *	long: 64;
 51 *	long: 64;
 52 *	int b;
 53 *	long: 64;
 54 *	long: 64;
 55 *	long: 64;
 56 *};
 57 *
 58 */
 59/* ------ END-EXPECTED-OUTPUT ------ */
 60
 61struct padded_cache_line {
 62	int a;
 63	int b __attribute__((aligned(32)));
 64};
 65
 66/* ----- START-EXPECTED-OUTPUT ----- */
 67/*
 68 *struct zone_padding {
 69 *	char x[0];
 70 *};
 71 *
 72 *struct zone {
 73 *	int a;
 74 *	short b;
 75 *	long: 0;
 76 *	struct zone_padding __pad__;
 77 *};
 78 *
 79 */
 80/* ------ END-EXPECTED-OUTPUT ------ */
 81
 82struct zone_padding {
 83	char x[0];
 84} __attribute__((__aligned__(8)));
 85
 86struct zone {
 87	int a;
 88	short b;
 89	struct zone_padding __pad__;
 90};
 91
 92/* ----- START-EXPECTED-OUTPUT ----- */
 93struct padding_wo_named_members {
 94	long: 64;
 95	long: 64;
 96};
 97
 98struct padding_weird_1 {
 99	int a;
100	long: 64;
101	short: 16;
102	short b;
103};
104
105/* ------ END-EXPECTED-OUTPUT ------ */
106
107/* ----- START-EXPECTED-OUTPUT ----- */
108/*
109 *struct padding_weird_2 {
110 *	long: 56;
111 *	char a;
112 *	long: 56;
113 *	char b;
114 *	char: 8;
115 *};
116 *
117 */
118/* ------ END-EXPECTED-OUTPUT ------ */
119struct padding_weird_2 {
120	int: 32;	/* these paddings will be collapsed into `long: 56;` */
121	short: 16;
122	char: 8;
123	char a;
124	int: 32;	/* these paddings will be collapsed into `long: 56;` */
125	short: 16;
126	char: 8;
127	char b;
128	char: 8;
129};
130
131/* ----- START-EXPECTED-OUTPUT ----- */
132struct exact_1byte {
133	char x;
134};
135
136struct padded_1byte {
137	char: 8;
138};
139
140struct exact_2bytes {
141	short x;
142};
143
144struct padded_2bytes {
145	short: 16;
146};
147
148struct exact_4bytes {
149	int x;
150};
151
152struct padded_4bytes {
153	int: 32;
154};
155
156struct exact_8bytes {
157	long x;
158};
159
160struct padded_8bytes {
161	long: 64;
162};
163
164struct ff_periodic_effect {
165	int: 32;
166	short magnitude;
167	long: 0;
168	short phase;
169	long: 0;
170	int: 32;
171	int custom_len;
172	short *custom_data;
173};
174
175struct ib_wc {
176	long: 64;
177	long: 64;
178	int: 32;
179	int byte_len;
180	void *qp;
181	union {} ex;
182	long: 64;
183	int slid;
184	int wc_flags;
185	long: 64;
186	char smac[6];
187	long: 0;
188	char network_hdr_type;
189};
190
191struct acpi_object_method {
192	long: 64;
193	char: 8;
194	char type;
195	short reference_count;
196	char flags;
197	short: 0;
198	char: 8;
199	char sync_level;
200	long: 64;
201	void *node;
202	void *aml_start;
203	union {} dispatch;
204	long: 64;
205	int aml_length;
206};
207
208struct nested_unpacked {
209	int x;
210};
211
212struct nested_packed {
213	struct nested_unpacked a;
214	char c;
215} __attribute__((packed));
216
217struct outer_mixed_but_unpacked {
218	struct nested_packed b1;
219	short a1;
220	struct nested_packed b2;
221};
222
223/* ------ END-EXPECTED-OUTPUT ------ */
224
225int f(struct {
226	struct padded_implicitly _1;
227	struct padded_explicitly _2;
228	struct padded_a_lot _3;
229	struct padded_cache_line _4;
230	struct zone _5;
231	struct padding_wo_named_members _6;
232	struct padding_weird_1 _7;
233	struct padding_weird_2 _8;
234	struct exact_1byte _100;
235	struct padded_1byte _101;
236	struct exact_2bytes _102;
237	struct padded_2bytes _103;
238	struct exact_4bytes _104;
239	struct padded_4bytes _105;
240	struct exact_8bytes _106;
241	struct padded_8bytes _107;
242	struct ff_periodic_effect _200;
243	struct ib_wc _201;
244	struct acpi_object_method _202;
245	struct outer_mixed_but_unpacked _203;
246} *_)
247{
248	return 0;
249}