Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 26 May 2014 13:48:01 -0700
From:      Adrian Chadd <adrian.chadd@gmail.com>
To:        Rene Ladan <rene@freebsd.org>
Cc:        chromium@freebsd.org, Pedro Giffuni <pfg@freebsd.org>, Dimitry Andric <dim@freebsd.org>
Subject:   Re: libffmpeg chromium crashes due to unaligned SSE accesses
Message-ID:  <CAJ-Vmo=qV419fukjmFHb3p23YcTiXSya9EVWEUpyvPoUjK0T0w@mail.gmail.com>
In-Reply-To: <538349BB.8050300@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> <CAJ-Vmon5wvaafw7sAzdPK7qmkVPfbi8NA83CBT=YOqAnnF-wVA@mail.gmail.com> <538349BB.8050300@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
I'll double check soon.

Please realize that a lot of these laptops I have aren't built for doing
large scale package building. I don't have anything with lots of ram and
disks. I run almost exclusively binary packages now days.

Adrian
On May 26, 2014 7:03 AM, "Ren=C3=A9 Ladan" <rene@freebsd.org> wrote:

> Hi,
>
> you mean that the patch I made out of Dimitrys patch works fine?
>
> Ren=C3=A9
>
> On 05/20/2014 18:28, Adrian Chadd wrote:
> > Hi,
> >
> > So whose arm should I twist to get this stuff committed to both the
> > libffmpeg and chromium ports?
> >
> >
> > -a
> >
> >
> > On 12 May 2014 15:08, Dimitry Andric <dim@freebsd.org> 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 clan=
g
> on i386-freebsd (ffmpeg confusingly calls this x86_32, which is something
> totally different in the rest of the world):
> >>
> >> -mstack-alignment=3D16
> >> -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 alignme=
nt
> 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 combine=
d
> >>> with whatever the stack alignment is, results in a crash.
> >>>
> >>> I've posted a coredump backtrace. I can generate chromium coredumps o=
n
> >>> 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 passe=
d
> 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 no=
t
> 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 no=
t
> 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 th=
e
> default port settings, and it seems to work just fine.  I tried transcodi=
ng
> 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=3D64 \
> >>>>>> -D_LARGEFILE_SOURCE \
> >>>>>> -DHAVE_AV_CONFIG_H \
> >>>>>> -O2 \
> >>>>>> -pipe \
> >>>>>> -march=3Dcorei7 \
> >>>>>> -DLIBICONV_PLUG \
> >>>>>> -fno-strict-aliasing \
> >>>>>> -msse \
> >>>>>> -I/usr/local/include/vorbis \
> >>>>>> -I/usr/local/include \
> >>>>>> -std=3Dc99 \
> >>>>>> -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=3Dimplicit-function-declaration \
> >>>>>> -Werror=3Dmissing-prototypes \
> >>>>>> -Werror=3Dreturn-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=C3=B3:
> >>>>>>>>>>
> >>>>>>>>>>> Hi guys,
> >>>>>>>>>>>
> >>>>>>>>>>> I filed a PR recently with chromium crashes in its internal
> libffmpeg:
> >>>>>>>>>>>
> >>>>>>>>>>> http://www.freebsd.org/cgi/query-pr.cgi?pr=3D189317
> >>>>>>>>>>>
> >>>>>>>>>>> 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=3Drevision&revision=3D2652=
31
> >>>>>>>>>>
> >>>>>>>>>> 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
> =3D=3D 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=3D38496
> >>>>>>>>
> >>>>>>>> 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
> >>>>>>>>
> >>>>>>
> >>>>
> >>
> >>
> > _______________________________________________
> > freebsd-chromium@freebsd.org mailing list
> > http://lists.freebsd.org/mailman/listinfo/freebsd-chromium
> > To unsubscribe, send any mail to "
> freebsd-chromium-unsubscribe@freebsd.org"
> >
>
>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ-Vmo=qV419fukjmFHb3p23YcTiXSya9EVWEUpyvPoUjK0T0w>