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 f(struct{ struct padded_implicitly _1; struct padded_explicitly _2; struct padded_a_lot _3; struct padded_cache_line _4; struct zone _5; } * _)102int 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 } 112