| .. | .. |
|---|
| 614 | 614 | if (align <= 0) |
|---|
| 615 | 615 | return align; |
|---|
| 616 | 616 | max_align = max(max_align, align); |
|---|
| 617 | + |
|---|
| 618 | + /* if field offset isn't aligned according to field |
|---|
| 619 | + * type's alignment, then struct must be packed |
|---|
| 620 | + */ |
|---|
| 621 | + if (btf_member_bitfield_size(t, i) == 0 && |
|---|
| 622 | + (m->offset % (8 * align)) != 0) |
|---|
| 623 | + return 1; |
|---|
| 617 | 624 | } |
|---|
| 618 | 625 | |
|---|
| 626 | + /* if struct/union size isn't a multiple of its alignment, |
|---|
| 627 | + * then struct must be packed |
|---|
| 628 | + */ |
|---|
| 629 | + if ((t->size % max_align) != 0) |
|---|
| 630 | + return 1; |
|---|
| 631 | + |
|---|
| 619 | 632 | return max_align; |
|---|
| 620 | 633 | } |
|---|
| 621 | 634 | default: |
|---|