| // SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause) |
| |
| /* |
| * BTF-to-C dumper tests for implicit and explicit padding between fields and |
| * at the end of a struct. |
| * |
| * Copyright (c) 2019 Facebook |
| */ |
| /* ----- START-EXPECTED-OUTPUT ----- */ |
| struct padded_implicitly { |
| int a; |
| long b; |
| char c; |
| }; |
| |
| /* ------ END-EXPECTED-OUTPUT ------ */ |
| |
| /* ----- START-EXPECTED-OUTPUT ----- */ |
| /* |
| *struct padded_explicitly { |
| * int a; |
| * long: 0; |
| * int b; |
| *}; |
| * |
| */ |
| /* ------ END-EXPECTED-OUTPUT ------ */ |
| |
| struct padded_explicitly { |
| int a; |
| int: 1; /* algo will emit aligning `long: 0;` here */ |
| int b; |
| }; |
| |
| /* ----- START-EXPECTED-OUTPUT ----- */ |
| struct padded_a_lot { |
| int a; |
| long: 64; |
| long: 64; |
| int b; |
| }; |
| |
| /* ------ END-EXPECTED-OUTPUT ------ */ |
| |
| /* ----- START-EXPECTED-OUTPUT ----- */ |
| /* |
| *struct padded_cache_line { |
| * int a; |
| * long: 64; |
| * long: 64; |
| * long: 64; |
| * int b; |
| * long: 64; |
| * long: 64; |
| * long: 64; |
| *}; |
| * |
| */ |
| /* ------ END-EXPECTED-OUTPUT ------ */ |
| |
| struct padded_cache_line { |
| int a; |
| int b __attribute__((aligned(32))); |
| }; |
| |
| /* ----- START-EXPECTED-OUTPUT ----- */ |
| /* |
| *struct zone_padding { |
| * char x[0]; |
| *}; |
| * |
| *struct zone { |
| * int a; |
| * short b; |
| * long: 0; |
| * struct zone_padding __pad__; |
| *}; |
| * |
| */ |
| /* ------ END-EXPECTED-OUTPUT ------ */ |
| |
| struct zone_padding { |
| char x[0]; |
| } __attribute__((__aligned__(8))); |
| |
| struct zone { |
| int a; |
| short b; |
| struct zone_padding __pad__; |
| }; |
| |
| /* ----- START-EXPECTED-OUTPUT ----- */ |
| struct padding_wo_named_members { |
| long: 64; |
| long: 64; |
| }; |
| |
| struct padding_weird_1 { |
| int a; |
| long: 64; |
| short: 16; |
| short b; |
| }; |
| |
| /* ------ END-EXPECTED-OUTPUT ------ */ |
| |
| /* ----- START-EXPECTED-OUTPUT ----- */ |
| /* |
| *struct padding_weird_2 { |
| * long: 56; |
| * char a; |
| * long: 56; |
| * char b; |
| * char: 8; |
| *}; |
| * |
| */ |
| /* ------ END-EXPECTED-OUTPUT ------ */ |
| struct padding_weird_2 { |
| int: 32; /* these paddings will be collapsed into `long: 56;` */ |
| short: 16; |
| char: 8; |
| char a; |
| int: 32; /* these paddings will be collapsed into `long: 56;` */ |
| short: 16; |
| char: 8; |
| char b; |
| char: 8; |
| }; |
| |
| /* ----- START-EXPECTED-OUTPUT ----- */ |
| struct exact_1byte { |
| char x; |
| }; |
| |
| struct padded_1byte { |
| char: 8; |
| }; |
| |
| struct exact_2bytes { |
| short x; |
| }; |
| |
| struct padded_2bytes { |
| short: 16; |
| }; |
| |
| struct exact_4bytes { |
| int x; |
| }; |
| |
| struct padded_4bytes { |
| int: 32; |
| }; |
| |
| struct exact_8bytes { |
| long x; |
| }; |
| |
| struct padded_8bytes { |
| long: 64; |
| }; |
| |
| struct ff_periodic_effect { |
| int: 32; |
| short magnitude; |
| long: 0; |
| short phase; |
| long: 0; |
| int: 32; |
| int custom_len; |
| short *custom_data; |
| }; |
| |
| struct ib_wc { |
| long: 64; |
| long: 64; |
| int: 32; |
| int byte_len; |
| void *qp; |
| union {} ex; |
| long: 64; |
| int slid; |
| int wc_flags; |
| long: 64; |
| char smac[6]; |
| long: 0; |
| char network_hdr_type; |
| }; |
| |
| struct acpi_object_method { |
| long: 64; |
| char: 8; |
| char type; |
| short reference_count; |
| char flags; |
| short: 0; |
| char: 8; |
| char sync_level; |
| long: 64; |
| void *node; |
| void *aml_start; |
| union {} dispatch; |
| long: 64; |
| int aml_length; |
| }; |
| |
| struct nested_unpacked { |
| int x; |
| }; |
| |
| struct nested_packed { |
| struct nested_unpacked a; |
| char c; |
| } __attribute__((packed)); |
| |
| struct outer_mixed_but_unpacked { |
| struct nested_packed b1; |
| short a1; |
| struct nested_packed b2; |
| }; |
| |
| /* ------ END-EXPECTED-OUTPUT ------ */ |
| |
| int f(struct { |
| struct padded_implicitly _1; |
| struct padded_explicitly _2; |
| struct padded_a_lot _3; |
| struct padded_cache_line _4; |
| struct zone _5; |
| struct padding_wo_named_members _6; |
| struct padding_weird_1 _7; |
| struct padding_weird_2 _8; |
| struct exact_1byte _100; |
| struct padded_1byte _101; |
| struct exact_2bytes _102; |
| struct padded_2bytes _103; |
| struct exact_4bytes _104; |
| struct padded_4bytes _105; |
| struct exact_8bytes _106; |
| struct padded_8bytes _107; |
| struct ff_periodic_effect _200; |
| struct ib_wc _201; |
| struct acpi_object_method _202; |
| struct outer_mixed_but_unpacked _203; |
| } *_) |
| { |
| return 0; |
| } |