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