[MPlayer-dev-eng] mingw64 4.7.x struct alignment behavior has changed
joshf87 at live.com
Sun Jan 19 04:57:48 CET 2014
On 1/18/2014 15:35, Reimar Döffinger wrote:
> On Fri, Jan 10, 2014 at 02:53:10AM +0100, Gianluigi Tiesi wrote:
>> Sorry for cross posting but it's related both to mplayer/ffmpeg
>> as stated in this announce:
>> For gcc-4.7.x, struct alignment behavior has changed, -mms-bitfields is
>> now default for better MSVC compatibility. This may cause ABI changes
>> in libraries that expose data structures directly to clients. Workaround
>> include marking the struct with the gcc_struct attributes.
>> this actually breaks mplayer libmpdemux/asf.h structs
>> e.g. ASF_stream_header_t is 56 bytes instead of 54
> This doesn't make sense, according to the documentation -mms-bitfields
> only affects bitfields.
> These structs do not use bitfields.
> The default 8-byte structure alignment could cause this, except
> that these are all marked with packed attribute which
> a) Is gcc-specific, so applying MS-compatibility stuff would be so
> idiotic I'd call it a bug
> b) Even on MS compilers packed structures should not have padding at the
> So I think this must be an actual compiler bug.
> MPlayer-dev-eng mailing list
> MPlayer-dev-eng at mplayerhq.hu
From what I can gather it is an actual bug since 4.2.0, but starting in
4.7 they enabled it by default for mingw targets even though it's still
libdvdread is also broken (libdvdread4/dvdread/ifo_types.h) by
ms-bitfields. DVDs won't work at all unless -mno-ms-bitfields is used.
Specifying 'gcc_struct' in ifo_types.h still crashed. Appending
-mno-ms-bitfields in MPlayer's cflags takes care of both problems
without changing any actual source.
More information about the MPlayer-dev-eng