.. | .. |
---|
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: |
---|