libffmpeg chromium crashes due to unaligned SSE accesses

Adrian Chadd adrian.chadd at gmail.com
Fri May 9 17:12:26 UTC 2014


cc'ing chromium@, as this bug is specifically about chrome.


-a


On 9 May 2014 10:09, Adrian Chadd <adrian.chadd at gmail.com> wrote:
> What's the magic to get the normal ffmpeg port to work right?
>
>
> -a
>
>
> On 9 May 2014 10:05, Dimitry Andric <dim at freebsd.org> wrote:
>> On 09 May 2014, at 18:42, Adrian Chadd <adrian.chadd at gmail.com> wrote:
>>> On 9 May 2014 06:50, Pedro Giffuni <pfg at freebsd.org> wrote:
>>>> Hello;
>>>>
>>>> El 5/9/2014 5:56 AM, Adrian Chadd escribió:
>>>>
>>>>> Hi guys,
>>>>>
>>>>> I filed a PR recently with chromium crashes in its internal libffmpeg:
>>>>>
>>>>> http://www.freebsd.org/cgi/query-pr.cgi?pr=189317
>>>>>
>>>>> What do you two think? It's that Linux 16 byte alignment on i386 issue
>>>>> that has been creeping up every few years.
>>>>>
>>>>
>>>> Ouch, that's clang, right?
>>>
>>> I gather so? It's whatever the binary package building cluster is
>>> using. I think it's clang for i386.
>>
>> For 10.x and 11.x, that should indeed be clang.
>>
>>
>>>
>>>> I recently brought this from OpenBSD, no idea if it's related:
>>>>
>>>> http://svnweb.freebsd.org/base?view=revision&revision=265231
>>>>
>>>> For now I guess we should just patch the libffmpeg port like the NetBSD guys
>>>> did.
>>>
>>> Kind of? The x86-64 ABI requires 16 byte alignment for a lot of stuff.
>>> The i386 32 bit ABI doesn't require 16 byte alignment as per
>>> everything pre-Linux-in-2005ish. Linux / gcc flipped the "i386 == 16
>>> byte alignment now" switch. I vaguely recall that they made
>>> _everything_ 16 byte aligned but I can't be sure.
>>
>> Yes, actually the gcc guys just flipped the switch somewhere in 2008,
>> without any consideration for backwards compatibility, and this lead to
>> quite a bit of wailing, but they WONTFIXed it anyway:
>>
>> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38496
>>
>> So the problem is that there are quite a lot of projects that simply
>> assume everything on x86 has 16-byte aligned stacks, and you can use SSE
>> instructions that require strict alignment (e.g. movaps) on any random
>> stack-allocated variable.  Obviously, on i386-freebsd, that is not the
>> case, as we still maintain the old SysV 4-byte alignment.
>>
>> FFmpeg is one of those projects that assumes 16-byte alignment, and also
>> has a lot of hand-written SSE assembly, either inline or in separate
>> yasm sources.  The brute-force way of fixing trouble with alignment is
>> to add -mstackrealign to CFLAGS, but I'm not sure if that is the correct
>> solution here.
>>
>> As far as I know, the current FFmpeg port seems to work OK on
>> i386-freebsd, so maybe it could be enough to fix up the Chromium version
>> of FFmpeg in a similar manner as the regular FFmpeg port?  I'm not sure
>> I will have enough time to have look at it soon, though...
>>
>> -Dimitry
>>


More information about the freebsd-chromium mailing list