On 23/01/2019 23:07, Bruce Rogers wrote:
An early look at gcc 9 compatibility with packages built in the OpenSUSE Build
Service
shows that the ipxe sources hit up against a new warning, which is documented
as follows:
-Waddress-of-packed-member, enabled by default, warns about an unaligned pointer
value from the address of a packed member of a struct or union.
This issue is reported in this openSUSE bug report:
https://bugzilla.opensuse.org/show_bug.cgi?id=1121464
I started to create a patch to address the instance in the bug report, but then
found out
that taking the address of members in packed structures is fairly common in the
code,
so I figured I'd first ask if someone is already looking into this or what
solution would
be best.
It's probably reasonable to simply silence this warning in the make system,
since I don't
think moving to gcc 9 and ignoring this new warning adds risk, but it does
point out
a portability and performance issue with the code which may be worth fixing.
I'd be happy to help provide code fixes, but don't want to jump the gun if
people
think silencing the warning is the solution.
iPXE code typically marks any hardware- or protocol-defined structures
as packed to indicate that the compiler may not adjust the structure
layout. This includes marking structures that are intrinsically
naturally aligned anyway, such as hardware descriptor ring entries. As
far as I'm aware, there's no way to annotate a structure definition as
"this is already naturally aligned, but the compiler is still explicitly
forbidden from inserting padding", so we end up just marking it as packed.
We build only for i386, x86_64, arm, and aarch64, all of which support
unaligned accesses. In the case of arm and aarch64, the unaligned
accesses are handled via the MMU, which works since the UEFI
specification for those architectures requires the MMU to be enabled and
to support unaligned accesses.
It would be nice to have support for architectures with stricter
alignment requirements, but only if the code changes are relatively clean.
My guess is that silencing the warning is the most appropriate fix, but
I'd be interested to see a small sample of how the code could
potentially be changed to work with the warning enabled.
Thanks,
Michael
_______________________________________________
ipxe-devel mailing list
ipxe-devel@lists.ipxe.org
https://lists.ipxe.org/mailman/listinfo.cgi/ipxe-devel