Date: Fri, 16 May 2014 22:26:02 +0200 From: =?ISO-8859-1?Q?Ren=E9_Ladan?= <rene@freebsd.org> To: freebsd-chromium@freebsd.org Subject: Re: libffmpeg chromium crashes due to unaligned SSE accesses Message-ID: <5376745A.9050800@freebsd.org> In-Reply-To: <9BF4309C-9D56-467F-B882-754B8C94AA29@FreeBSD.org> References: <CAJ-Vmo=C0dEhiK4O9Kunkg-P8ogSC_u_tsf_CQnUZMDvrXR-4g@mail.gmail.com> <536CDD30.40104@FreeBSD.org> <CAJ-Vmo=U3Ow3s728rXiEmfJZY%2BinkQRjiJ0bBvRmf0gALaCeew@mail.gmail.com> <7C272AE1-BA6E-48A9-9662-79B1030D0903@FreeBSD.org> <CAJ-VmonLr6m1c-XX-cB-LiQT0JtoGv97dd6VHzYZPCC3hCxreQ@mail.gmail.com> <9810619D-DF65-4A4F-9720-B22DC791EA65@FreeBSD.org> <CAJ-VmoknOe8d9H5o8D1XMWn%2Bq%2B_aJ-B46URwkOsnVkWAXEhamw@mail.gmail.com> <FC7C93ED-F20B-4999-BF84-280F9DA9926A@FreeBSD.org> <CAJ-Vmok9o5XLmybGrrjTpGpUAydRNMDek7WkjRbd7EJFXt2-Kg@mail.gmail.com> <9BF4309C-9D56-467F-B882-754B8C94AA29@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format. --------------050001070804050701020205 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 [continue top-posting ...] Can you try the attached patch (i.e. put in files/ and rebuild chromium) ? % patch < files/patch-third_party__ffmpeg__chromium* % rm work/.configure_done* work/.build_done* work/.stage_done* % make The patch should be invoked on both gcc and clang builds, on amd64 systems this should not rebuild anything. René On 05/13/2014 00:08, Dimitry Andric wrote: > Since I still can't reproduce any crashes with the current > multimedia/ffmpeg port, I made this patch for you to try out. I > think something similar can be applied to the version of ffmpeg > embedded in chromium, but that seems to use yet another NIH build > system of the month. This is probably something for the chromium > maintainers to figure out. > > The basic idea is to to add the following flags, if building with > clang on i386-freebsd (ffmpeg confusingly calls this x86_32, which > is something totally different in the rest of the world): > > -mstack-alignment=16 -mstackrealign > > The former forces clang to assume 16-byte stack alignment, even on > i386, and the latter forces a realignment to 16 bytes at the entry > point of each function. Something similar is probably needed for > gcc, but alignment is broken there anyway... > > -Dimitry > > > > > On 09 May 2014, at 23:53, Adrian Chadd <adrian.chadd@gmail.com> > wrote: > >> Just using it for a day or so. You'll stumble across things like >> moving images in facebook, embedded youtube images, etc, that >> combined with whatever the stack alignment is, results in a >> crash. >> >> I've posted a coredump backtrace. I can generate chromium >> coredumps on my i386 laptop many, many times a day. It's actually >> happening. >> >> >> -a >> >> >> On 9 May 2014 14:49, Dimitry Andric <dim@freebsd.org> wrote: >>> I think you are referring to the --enable-memalign-hack option >>> passed to ffmpeg's configure script? That is something related >>> to posix_memalign(), not to stack alignment. >>> >>> That said, I just built the chromium port with its default >>> options, and while I cannot get it to crash, I cannot get it to >>> display any video either. It must be because I'm running a >>> VMware guest, and chromium does not cope with that too well >>> (Firefox seems to work much better, though not terribly fast). >>> >>> What kind of activity should make chromium crash? Just running >>> it, or displaying a certain website? >>> >>> -Dimitry >>> >>> On 09 May 2014, at 21:11, Adrian Chadd <adrian.chadd@gmail.com> >>> wrote: >>> >>>> There's an alignment hack option in the ffmpeg port though. >>>> It's not a cflags thing, it's a ./configure thing. >>>> >>>> >>>> >>>> >>>> -a >>>> >>>> >>>> On 9 May 2014 11:40, Dimitry Andric <dim@freebsd.org> wrote: >>>>> I just tried building multimedia/ffmpeg on i386-freebsd11, >>>>> with the default port settings, and it seems to work just >>>>> fine. I tried transcoding a few files, and there were no >>>>> stack alignment problems or SIGBUSes. >>>>> >>>>> Looking at the build logs, I see >>>>> >>>>> C compiler cc ARCH x86 >>>>> (generic) big-endian no runtime cpu >>>>> detection yes yasm yes MMX enabled >>>>> yes MMXEXT enabled yes 3DNow! enabled >>>>> yes 3DNow! extended enabled yes SSE enabled >>>>> yes SSSE3 enabled yes AVX enabled >>>>> yes FMA4 enabled yes i686 features enabled >>>>> yes CMOV is fast no EBX available >>>>> yes EBP available yes ... >>>>> >>>>> The command line flags used for compilation (wrapped for >>>>> clarity) don't seem to include specific ones that change >>>>> stack alignment behavior: >>>>> >>>>> cc \ -I. \ -I./ \ -DLIBICONV_PLUG \ -D_ISOC99_SOURCE \ >>>>> -D_FILE_OFFSET_BITS=64 \ -D_LARGEFILE_SOURCE \ >>>>> -DHAVE_AV_CONFIG_H \ -O2 \ -pipe \ -march=corei7 \ >>>>> -DLIBICONV_PLUG \ -fno-strict-aliasing \ -msse \ >>>>> -I/usr/local/include/vorbis \ -I/usr/local/include \ >>>>> -std=c99 \ -fomit-frame-pointer \ -I/usr/local/include \ >>>>> -I/usr/local/include/freetype2 \ >>>>> -I/usr/local/include/libpng15 \ -I/usr/local/include \ >>>>> -I/usr/local/include/p11-kit-1 \ >>>>> -I/usr/local/include/freetype2 \ >>>>> -I/usr/local/include/libpng15 \ -I/usr/local/include/opencv >>>>> \ -I/usr/local/include \ >>>>> -I/usr/local/include/schroedinger-1.0 \ >>>>> -I/usr/local/include/orc-0.4 \ >>>>> -Wdeclaration-after-statement \ -Wall \ -Wno-parentheses \ >>>>> -Wno-switch \ -Wno-format-zero-length \ >>>>> -Wdisabled-optimization \ -Wpointer-arith \ >>>>> -Wredundant-decls \ -Wno-pointer-sign \ -Wwrite-strings \ >>>>> -Wtype-limits \ -Wundef \ -Wmissing-prototypes \ >>>>> -Wno-pointer-to-int-cast \ -Wstrict-prototypes \ -O3 \ >>>>> -fno-math-errno \ -fno-signed-zeros \ -Qunused-arguments \ >>>>> -Werror=implicit-function-declaration \ >>>>> -Werror=missing-prototypes \ -Werror=return-type \ -MMD \ >>>>> -c \ >>>>> >>>>> I'll build chromium with the default options, and see what >>>>> happens. >>>>> >>>>> -Dimitry >>>>> >>>>> On 09 May 2014, at 19:09, Adrian Chadd >>>>> <adrian.chadd@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@freebsd.org> >>>>>> wrote: >>>>>>> On 09 May 2014, at 18:42, Adrian Chadd >>>>>>> <adrian.chadd@gmail.com> wrote: >>>>>>>> On 9 May 2014 06:50, Pedro Giffuni <pfg@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 >>>>>>> >>>>> >>> > -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (FreeBSD) Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iQJ8BAEBCgBmBQJTdnRZXxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25zLm9w ZW5wZ3AuZmlmdGhob3JzZW1hbi5uZXQxMDFBNzE2QjE2MkIwMEU1NUJFREVBMDVB REJCRjg2MTBBMzc4OUI3AAoJEK27+GEKN4m3pO8P/j3N+F08rGR0EddqyIk0EckM oP529QME5jfHe4st2L4YieROGyTZ52f9FgorcDXja0oKlmqdXQ0gLxRgthHkJNOw UWmLP8x4Dfe8h3lY2BwXijGq9kdu1EV9bXucQpQuArYCvAVqgHC3ZuH9y2E5xmGo xHJrRlelZ8cXUVXmOsBhtTk7Vs13Hj//GLUGUI70M9Uwi3nr7+ZV1/2okmnqsFtO WCiLw8ErRjBZ0dn/xlRdTEpQbzFyCohjKxjGRyrHo3BQcGth6WTvKIQvO7mzxxgC vZr50NNjAHTGYlJZVbyooA28pO2NKl8ykBMIDnxAMTWN5oHfYH2HNOgWq+UWpwRB ukPNrnT0YiOK9k00HKuqMl3v1vupXP95nbEL4xHAirE1xZV7dzoPh/7aN6qfpGS8 K7Azl5/2ADxBh73z8xdPHVPTX/4QcRg7jeSUwkTkRAcj24LEAxWlpgo34Okwa1If wVxjPFqjHOyAT29sLY50SpByqe/uVMzDKsbLEHI9F8u96MeAwbiDDZhq+DSH10uU 0OqcK9KbdkQrCjbmBxL0mIb6ziDtEhgs0gRnT8cMgGgLvbtLQRCqJT4D6djzyevS i1/hv+Rk8mdu8WlJ7J/SpxelBijxZse/E2JCWwt7XaNjHRT/9VI1o0KxBBwPvWTE rPYEDE/EVtis3SKWQ32o =ifpL -----END PGP SIGNATURE----- --------------050001070804050701020205 Content-Type: application/octet-stream; name="patch-third_party__ffmpeg__chromium__config__Chromium__linux__ia32__config.h.sig" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="patch-third_party__ffmpeg__chromium__config__Chromium__linux"; filename*1="__ia32__config.h.sig" iQJ8BAABCgBmBQJTdnRaXxSAAAAAAC4AKGlzc3Vlci1mcHJAbm90YXRpb25zLm9wZW5wZ3Au ZmlmdGhob3JzZW1hbi5uZXQxMDFBNzE2QjE2MkIwMEU1NUJFREVBMDVBREJCRjg2MTBBMzc4 OUI3AAoJEK27+GEKN4m30DQP/0pH8dirLHgJcYpju2LaKxwFyrFVBWKSbWz4q8b99/Mb7zwo 48U/jO21VW2aC0iDb3NnXVFJOdxJiRVYwZGgTM/Wd3weyVYn1MqoTxhRCChw8pddjC5aM895 xwS5qz8GgcqHitJvno5Dugr8E7+czxyH06QVPyZuGp8TP9izts+xbNlerAAQeEV7/Xnq+kIl 5aDNV0UQIA+RrEu5ygmiUG2sgc6Qd9qEhkw9LclVBOMGOH/kZ7EFuUvtrq5UMKVI64dWE90X v/s6Naf2qAvJs/T6Q6jVtnqWjsKJRWykUFV+wOLfB6wVrCjfSowOObZ6q7LYj/aEyIAHH+DK 6+Uppxq+iKFBWLI7G6Le4gmqYuVWSKSpMA7elMqjvtrwbtpT+DcaQFgpcQgGBwz/yRMUaW6q JEHMT+YVC/307/qmNw0OSTvpYq8Iw+K++c0tKqQxqDg959CefEs7POHZCnoEpxHxQbIvsXfz 0jG5kxJFX1mFL0H524p/JxYWlHh4f1sUYs8XvylfRw89s1AMDehs1/FaYSbzWw2wNWoEZL/g j06YU5tR7FaD5brbkmVPGCUrPs9plQltVLQDSlBT3YyoPE0k8xuRJ38wDTN9gD3ZHTXjok+F 0xcUZMUr0trIvNmogjArfGeHCbk/WPoHnZh7uoYDcECUTlT2qLeu2NK5BKME --------------050001070804050701020205--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?5376745A.9050800>