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 * long: 32; 66 * long: 64; 67 * long: 64; 68 * long: 64; 69 *}; 70 * 71 */ 72 /* ------ END-EXPECTED-OUTPUT ------ */ 73 74 struct 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 95 struct zone_padding { 96 char x[0]; 97 } __attribute__((__aligned__(8))); 98 99 struct zone { 100 int a; 101 short b; 102 struct zone_padding __pad__; 103 }; 104 f(struct{ struct padded_implicitly _1; struct padded_explicitly _2; struct padded_a_lot _3; struct padded_cache_line _4; struct zone _5; } * _)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 } 115