[Qtwebengine] webengine crash

Andras Becsi andras.becsi at theqtcompany.com
Tue Feb 3 17:37:20 CET 2015


Hi Tom,

As far as I know chromium does not officially support cross-compiling 
32bits on 64 bits.

Your problem is most probably due to miscompilation, because to the 
build system is not picking up the proper configuration.

I suggest you try compiling in a 32bit chroot instead, since 
qtwebengine's cross-compilation config is set up for embedded builds.

Some additional notes inline.

/Andras

On 02/03/2015 05:19 PM, Tom Deblauwe wrote:
> On 02/03/2015 11:26 AM, Peter Varga wrote:
>> Hi Tom,
>>
>> I tried to reproduce the reported problem but I couldn't. I compiled the
>> 32bit Qt5 as I usually do:
>
> Thanks a lot for your investigation time.
>
>> made the build in an already set up 32bit chroot environment. Therefore
>> I suppose that the problem is
>> related to the cross-compilation. It might be possible some platform
>> specific configuration are passed
>> to the V8 compilation in a wrong way.
>>
>> Could you elaborate a bit how you cross-compiled the Qt5? First of all I
>> need answers for the following
>> questions:
>> - Just to make things clear: your target is x86 32bit and Linux, isn't it?
>
> Yes, correct
>
>> - I generated a 32bit cross-toolchain with buildroot. I used the default
>> configuration. Did you change
>> anything compared to the default settings in buildroot? For example, do
>> you use uclibc or glibc?
>
> Hello I used gcc 4.9.2 with glibc with a buildroot version from the
> master branch on 4th november 2014. (I forgot to note the actual commit)
>
>> - Which configuration options was passed to the Qt5's configure script?
>> I don't know how to set the
>> cross-compile toolchain. The easiest way is seemed to me to use the
>> -device-option CROSS_COMPILE=...
>> option but it is useless without specifying -device option.
>>
>
> In the buildroot version, you can have QT5 5.3, but it works if you just
> change the version number in package/qt5/qt5.mk to 5.4.0
>
> Then I just started from qt5webkit.mk and made qt5webengine.mk like I
> have copy-pasted below.
>
> You don't need to worry about the cross compilation of qt5, buildroot
> creates a cross compiled qmake in the output directory.
>
> Then for webengine source itself, I needed to change some things.
>
> 1) In tools/qmake/mkspecs/features/functions.prf I needed to add
> "linux-buildroot-g++: return (true)" so that the "isPlatformSupported"
> function accepts buildroot.
>
> 2) Then webengine wants to build the "embedded_linux.pri" configuration.
> There I changed the following because I wanted pulseaudio and x11:

This will most probably already produce a problematic build.
Your build should use desktop_linux.pri, cross-compilation is set up for 
embedded.

>
> use_ozone=0
> use_system_icu=0   <-- the icu in buildroot is 51 and the bundled in
> webengine is 46 and webengine uses those 46 headers because they are in
> third_party
> use_x11=1
> use_glib=1
> use_dbus=1
> use_pulseaudio=1
> desktop_linux=1    <-- because i had some sort of compile error, don't
> remember which one
>
> 3) In src/core/config/embedded_linux.gypi I added this, hardcoded, not
> good but it is ok for me:
>
>       'defines': [
>         '_LARGEFILE_SOURCE',
>         '_LARGEFILE64_SOURCE',
>         '_FILE_OFFSET_BITS=64',
>       ],
>       'cflags': [
>          '-pipe',
>          '-O2',
>          '-g2',
>       ],
>
AFAICT this on it's own can already cause v8 JIT to miscompile, so your 
crash is definetely caused by your configuration.


>
> The easiest is to do:
> $ make qt5webengine-patch
>
> <edit the things I mention>
>
> $ make qt5webengine
>
>
> I hope this somewhat helps you out.
>
>
> Right now I am trying out some things, but it all takes a long time to
> compile of course :)
> One idea I am now trying out is that maybe I should add something like
> this to the "tools/buildscripts/gyp_qtwebengine" python script:
>
> os.environ['CXX'] =
> "/home/tdeblauwe/git/thinclient-os/output/host/usr/bin/ccache
> /home/tdeblauwe/git/thinclient-os/output/host/usr/bin/i686-buildroot-linux-gnu-g++"
> os.environ['CC'] =
> "/home/tdeblauwe/git/thinclient-os/output/host/usr/bin/ccache
> /home/tdeblauwe/git/thinclient-os/output/host/usr/bin/i686-buildroot-linux-gnu-gcc"
> args.extend(['-D', 'clang=0'])
> args.extend(['-D', 'host_clang=0'])
>

This will most certainly not fix your v8 crash.


>
> But I'm still compiling it, so I'll let you know any outcome.
>
> Thanks,
> Best regards,
> Tom,
>
>
> ################################################################################
> #
> # qt5webengine
> #
> ################################################################################
>
> QT5WEBENGINE_VERSION = $(QT5_VERSION)
> QT5WEBENGINE_SITE = $(QT5_SITE)
> #QT5WEBENGINE_SOURCE =
> qtwebengine-opensource-src-$(QT5WEBENGINE_VERSION).tar.xz
> QT5WEBENGINE_SOURCE = qt5-webengine.tar.gz
> QT5WEBENGINE_DEPENDENCIES = qt5base sqlite host-ruby host-gperf
> host-bison host-flex xlib_libXi xlib_libXt xlib_libXtst xapp_xrandr
> xlib_libXcursor xlib_libXcomposite pciutils
> QT5WEBENGINE_INSTALL_STAGING = YES
>
> ifeq ($(BR2_PACKAGE_QT5BASE_LICENSE_APPROVED),y)
> QT5WEBENGINE_LICENSE = LGPLv2+, MIT
> else
> QT5WEBENGINE_LICENSE = LGPLv2+, MIT, Commercial license
> QT5WEBENGINE_REDISTRIBUTE = NO
> endif
> QT5WEBENGINE_LICENSE_FILES = Source/WebCore/LICENSE-LGPL-2
> Source/WebCore/LICENSE-LGPL-2.1 Source/WebEngine/LICENSE
>
> ifeq ($(BR2_PACKAGE_QT5BASE_XCB),y)
> QT5WEBENGINE_DEPENDENCIES += xlib_libXext xlib_libXrender
> endif
>
> ifeq ($(BR2_PACKAGE_QT5DECLARATIVE),y)
> QT5WEBENGINE_DEPENDENCIES += qt5declarative
> endif
>
> define QT5WEBENGINE_CONFIGURE_CMDS
> 	(cd $(@D); $(TARGET_MAKE_ENV) $(HOST_DIR)/usr/bin/qmake)
> endef
>
> define QT5WEBENGINE_BUILD_CMDS
> 	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D)
> endef
>
> define QT5WEBENGINE_INSTALL_STAGING_CMDS
> 	$(TARGET_MAKE_ENV) $(MAKE) -C $(@D) install
> 	$(QT5_LA_PRL_FILES_FIXUP)
> endef
>
> ifeq ($(BR2_PACKAGE_QT5DECLARATIVE_QUICK),y)
> define QT5WEBENGINE_INSTALL_TARGET_QMLS
> 	cp -dpfr $(STAGING_DIR)/usr/qml/QtWebEngine $(TARGET_DIR)/usr/qml/
> endef
> endif
>
> define QT5WEBENGINE_INSTALL_TARGET_CMDS
> 	cp -dpf $(STAGING_DIR)/usr/lib/libQt5WebEngine*.so.* $(TARGET_DIR)/usr/lib
> 	cp -dpf $(STAGING_DIR)/usr/libexec/QtWebEngineProcess
> $(TARGET_DIR)/usr/libexec
>       mkdir -p $(TARGET_DIR)/usr/translations/qtwebengine_locales
>       cp -dpf
> $(STAGING_DIR)/usr/translations/qtwebengine_locales/en-US.pak
> $(TARGET_DIR)/usr/translations/qtwebengine_locales
>       cp -dpf $(STAGING_DIR)/usr/qtwebengine_resources.pak $(TARGET_DIR)/usr
> 	$(QT5WEBENGINE_INSTALL_TARGET_QMLS)
> endef
>
> $(eval $(generic-package))
>
> _______________________________________________
> QtWebEngine mailing list
> QtWebEngine at qt-project.org
> http://lists.qt-project.org/mailman/listinfo/qtwebengine
>


-- 
Best regards,
András Bécsi
Software Engineer | The Qt Company

The Qt Company AS
Sandakerveien 116
0484 Oslo, Norway

Mailing address:
PO Box 23 Nydalen
0410 Oslo, Norway

Visit us on: http://www.qt.io



More information about the QtWebEngine mailing list