Page MenuHomeFreeBSD

bhyve: Appease warning about a potentially unaligned pointer.

Authored by jhb on Wed, Nov 23, 11:16 PM.
Referenced Files
Unknown Object (File)
Fri, Dec 2, 10:52 AM
Unknown Object (File)
Tue, Nov 29, 1:46 AM



When initializing the device model for a PCI pass through device that
uses MSI-X, bhyve reads the MSI-X capability from the real device to
save a copy in the emulated PCI config space. It also saves a copy in
a local struct msixcap on the stack. Since struct msixcap is packed,
GCC complains that casting a pointer to the struct to a uint32_t
pointer may result in an unaligned pointer.

This path is not performance critical, so to appease the compiler,
simply change the pointer to a char * and use memcpy to copy the 4
bytes read in each iteration of the loop.

Diff Detail

rG FreeBSD src repository
Lint Not Applicable
Tests Not Applicable

Event Timeline

jhb requested review of this revision.Wed, Nov 23, 11:16 PM

I realize the person from illumos might have had a different fix for this, but I think this might be the cleanest of the options. I tried adding an __Alignas(4) on the local variable and that didn't appease GCC's warning here.

This revision is now accepted and ready to land.Thu, Nov 24, 6:38 AM