// SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) /* * BTF-to-C dumper tests for struct packing determination. * * Copyright (c) 2019 Facebook */ /* ----- START-EXPECTED-OUTPUT ----- */ struct packed_trailing_space { int a; short b; } __attribute__((packed)); struct non_packed_trailing_space { int a; short b; }; struct packed_fields { short a; int b; } __attribute__((packed)); struct non_packed_fields { short a; int b; }; struct nested_packed { char: 4; int a: 4; long b; struct { char c; int d; } __attribute__((packed)) e; } __attribute__((packed)); union union_is_never_packed { int a: 4; char b; char c: 1; }; union union_does_not_need_packing { struct { long a; int b; } __attribute__((packed)); int c; }; union jump_code_union { char code[5]; struct { char jump; int offset; } __attribute__((packed)); }; /* ----- START-EXPECTED-OUTPUT ----- */ /* *struct nested_packed_but_aligned_struct { * int x1; * int x2; *}; * *struct outer_implicitly_packed_struct { * char y1; * struct nested_packed_but_aligned_struct y2; *} __attribute__((packed)); * */ /* ------ END-EXPECTED-OUTPUT ------ */ struct nested_packed_but_aligned_struct { int x1; int x2; } __attribute__((packed)); struct outer_implicitly_packed_struct { char y1; struct nested_packed_but_aligned_struct y2; }; /* ----- START-EXPECTED-OUTPUT ----- */ /* *struct usb_ss_ep_comp_descriptor { * char: 8; * char bDescriptorType; * char bMaxBurst; * short wBytesPerInterval; *}; * *struct usb_host_endpoint { * long: 64; * char: 8; * struct usb_ss_ep_comp_descriptor ss_ep_comp; * long: 0; *} __attribute__((packed)); * */ /* ------ END-EXPECTED-OUTPUT ------ */ struct usb_ss_ep_comp_descriptor { char: 8; char bDescriptorType; char bMaxBurst; int: 0; short wBytesPerInterval; } __attribute__((packed)); struct usb_host_endpoint { long: 64; char: 8; struct usb_ss_ep_comp_descriptor ss_ep_comp; long: 0; }; /* ----- START-EXPECTED-OUTPUT ----- */ struct nested_packed_struct { int a; char b; } __attribute__((packed)); struct outer_nonpacked_struct { short a; struct nested_packed_struct b; }; struct outer_packed_struct { short a; struct nested_packed_struct b; } __attribute__((packed)); /* ------ END-EXPECTED-OUTPUT ------ */ int f(struct { struct packed_trailing_space _1; struct non_packed_trailing_space _2; struct packed_fields _3; struct non_packed_fields _4; struct nested_packed _5; union union_is_never_packed _6; union union_does_not_need_packing _7; union jump_code_union _8; struct outer_implicitly_packed_struct _9; struct usb_host_endpoint _10; struct outer_nonpacked_struct _11; struct outer_packed_struct _12; } *_) { return 0; }