brintos

brintos / linux-shallow public Read only

0
0
Text · 3.7 KiB · 79276fb Raw
250 lines · 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 and5 * at the end of a struct.6 *7 * Copyright (c) 2019 Facebook8 */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}250