1// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) 2 3/* 4 * BTF-to-C dumper tests for struct packing determination. 5 * 6 * Copyright (c) 2019 Facebook 7 */ 8/* ----- START-EXPECTED-OUTPUT ----- */ 9struct packed_trailing_space { 10 int a; 11 short b; 12} __attribute__((packed)); 13 14struct non_packed_trailing_space { 15 int a; 16 short b; 17}; 18 19struct packed_fields { 20 short a; 21 int b; 22} __attribute__((packed)); 23 24struct non_packed_fields { 25 short a; 26 int b; 27}; 28 29struct nested_packed { 30 char: 4; 31 int a: 4; 32 long b; 33 struct { 34 char c; 35 int d; 36 } __attribute__((packed)) e; 37} __attribute__((packed)); 38 39union union_is_never_packed { 40 int a: 4; 41 char b; 42 char c: 1; 43}; 44 45union union_does_not_need_packing { 46 struct { 47 long a; 48 int b; 49 } __attribute__((packed)); 50 int c; 51}; 52 53union jump_code_union { 54 char code[5]; 55 struct { 56 char jump; 57 int offset; 58 } __attribute__((packed)); 59}; 60 61/* ----- START-EXPECTED-OUTPUT ----- */ 62/* 63 *struct nested_packed_but_aligned_struct { 64 * int x1; 65 * int x2; 66 *}; 67 * 68 *struct outer_implicitly_packed_struct { 69 * char y1; 70 * struct nested_packed_but_aligned_struct y2; 71 *} __attribute__((packed)); 72 * 73 */ 74/* ------ END-EXPECTED-OUTPUT ------ */ 75 76struct nested_packed_but_aligned_struct { 77 int x1; 78 int x2; 79} __attribute__((packed)); 80 81struct outer_implicitly_packed_struct { 82 char y1; 83 struct nested_packed_but_aligned_struct y2; 84}; 85/* ----- START-EXPECTED-OUTPUT ----- */ 86/* 87 *struct usb_ss_ep_comp_descriptor { 88 * char: 8; 89 * char bDescriptorType; 90 * char bMaxBurst; 91 * short wBytesPerInterval; 92 *}; 93 * 94 *struct usb_host_endpoint { 95 * long: 64; 96 * char: 8; 97 * struct usb_ss_ep_comp_descriptor ss_ep_comp; 98 * long: 0; 99 *} __attribute__((packed)); 100 * 101 */ 102/* ------ END-EXPECTED-OUTPUT ------ */ 103 104struct usb_ss_ep_comp_descriptor { 105 char: 8; 106 char bDescriptorType; 107 char bMaxBurst; 108 int: 0; 109 short wBytesPerInterval; 110} __attribute__((packed)); 111 112struct usb_host_endpoint { 113 long: 64; 114 char: 8; 115 struct usb_ss_ep_comp_descriptor ss_ep_comp; 116 long: 0; 117}; 118 119/* ----- START-EXPECTED-OUTPUT ----- */ 120struct nested_packed_struct { 121 int a; 122 char b; 123} __attribute__((packed)); 124 125struct outer_nonpacked_struct { 126 short a; 127 struct nested_packed_struct b; 128}; 129 130struct outer_packed_struct { 131 short a; 132 struct nested_packed_struct b; 133} __attribute__((packed)); 134 135/* ------ END-EXPECTED-OUTPUT ------ */ 136 137int f(struct { 138 struct packed_trailing_space _1; 139 struct non_packed_trailing_space _2; 140 struct packed_fields _3; 141 struct non_packed_fields _4; 142 struct nested_packed _5; 143 union union_is_never_packed _6; 144 union union_does_not_need_packing _7; 145 union jump_code_union _8; 146 struct outer_implicitly_packed_struct _9; 147 struct usb_host_endpoint _10; 148 struct outer_nonpacked_struct _11; 149 struct outer_packed_struct _12; 150} *_) 151{ 152 return 0; 153} 154