btf_dump_test_case_padding.c (1775B)
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 * int: 32; 23 * int b; 24 *}; 25 * 26 */ 27/* ------ END-EXPECTED-OUTPUT ------ */ 28 29struct 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 48struct 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 74struct 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 95struct zone_padding { 96 char x[0]; 97} __attribute__((__aligned__(8))); 98 99struct zone { 100 int a; 101 short b; 102 struct zone_padding __pad__; 103}; 104 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}