On Thu Oct 20 17:51:23 2022 +0000, **** wrote:
Zebediah Figura replied on the mailing list:
On 10/20/22 03:54, Eric Pouech wrote: > From: Eric Pouech <eric.pouech@gmail.com> > > Some Windows version expect output to be aligned on 4 bytes. > > Notes (from i386 and x86_64 tests): > - MSVC and Mingw/gcc don't layout the two variables (sdki, sdki_ex) > the same way. > - MSVC aligns each variable on 4-byte boundary, > - MingW/GCC stores them in a 8-byte chunk, but starting from the > end of the buffer: hence none of them is on a 4-byte boundary. > > So, fixing the alignment of variables is not sufficient to > workaround the compilers' discrepancy on all source code. > > I didn't find a generic way to align on 4 bytes structures of size > smaller than 4 bytes (apart from adding the DECLSPEC_ALIGN to > each of the offending structures, likely not that many though). > Ideas welcomed. Should we put those structs in pshpack4/poppack in the header? (They aren't defined anywhere publicly on Windows, so we can't compare there.)
from the testbot results, it seems that only W8 and early versions of W10 return errors on pointers not aligned on 4-byte; newer versions of W10 happily handle calls with unaligned pointers
so I considered that the "default" is to support non aligned access, but this requires adapting the tests to workaround limitations (not to say bug) in W8/early W10 versions rather than to put it inside the structure declaration