[Development] Help needed: Qt 3D Android build issue

Sean Harmer sean.harmer at kdab.com
Thu May 26 14:00:44 CEST 2016


Hi Marc,

On Thursday 26 May 2016 08:32:21 Marc Mutz wrote:
> Hi,
> 
> In QAtomic, we use compare_exchange_strong with a single memory_order
> argument. The failure mode is therefore calculated by libctdc++, the
> relevant code in atomic_base.h has not changed from 4.8.0 to 6.1.0, and
> appears to do the correct thing. It does use signed bitmasking operations
> with enums that have values with the high bit set (on 32-bit platforms), so
> theoretically there can be a miscompile there.
> 
> A workaround for Qt might be to pass an explicit failure mode, which would
> avoid aforementioned code in libstdc++.
> 
> If the failure is reproducible, then someone with access to the
> configuration could try the attached patch.

Thanks for the patch. The issue was worked around by upgrading the Android CI 
nodes to use gcc 4.9 rather than 4.8.

If anybody else if using 4.8 then they can try this patch.

Cheers,

Sean

> 
> Thanks,
> Marc
> 
> On Monday 23 May 2016 13:54:16 Sean Harmer wrote:
> > Bump, is anybody able to help here please?
> > 
> > Thanks,
> > 
> > Sean
> > 
> > On Friday 20 May 2016 10:13:51 Sean Harmer wrote:
> > > Hi,
> > > 
> > > Trying to submit a simple patch to Qt 3D we are hitting a weird
> > > compilation error on Android CI configurations. The change is:
> > > 
> > > https://codereview.qt-project.org/#/c/157592/
> > > 
> > > and the compilation errors can be seen in full at:
> > > 
> > > http://testresults.qt.io/logs/qt/qt3d/489c6abe13e098eb87fa2c0a8639d43dfc
> > > a
> > > 8c0
> > > 2f/LinuxRHEL_6_6x86_64AndroidAndroid_22armv7GCCRelease_DisableTests_Open
> > > GLES
> > > 2_NoUseGoldLinker/1e29b40895b69af3bcc7f2f8a4b041b69e05b286/buildlog.txt.
> > > gz
> > > 
> > > but in brief they are:
> > > 
> > > In file included from /opt/android/ndk/sources/cxx-stl/gnu-
> > > libstdc++/4.8/include/atomic:41:0,
> > > 
> > >                  from
> > > 
> > > /home/qt/work/install/include/QtCore/qatomic_cxx11.h:45, from
> > > /home/qt/work/install/include/QtCore/qbasicatomic.h:53, from
> > > /home/qt/work/install/include/QtCore/qatomic.h:46, from
> > > /home/qt/work/install/include/QtCore/qglobal.h:1145, from
> > > ../../include/Qt3DCore/../../src/core/qt3dcore_global.h:43,
> > > 
> > >                  from ../../include/Qt3DCore/qt3dcore_global.h:1,
> > >                  from
> > > 
> > > ../../include/Qt3DRender/../../src/render/qt3drender_global.h:43,
> > > 
> > >                  from ../../include/Qt3DRender/qt3drender_global.h:1,
> > >                  from
> > > 
> > > ../../include/Qt3DRender/5.7.0/Qt3DRender/private/../../../../../src/ren
> > > d
> > > er/ backend/backendnode_p.h:54, from
> > > ../../include/Qt3DRender/5.7.0/Qt3DRender/private/backendnode_p.h:1,
> > > 
> > >                  from backend/entity_p.h:55,
> > > 
> > >                  from backend/entity.cpp:40:
> > > /opt/android/ndk/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/atomic_b
> > > a
> > > se. h: In member function 'virtual void
> > > Qt3DRender::Render::Entity::sceneChangeEvent(const QSceneChangePtr&)':
> > > /opt/android/ndk/sources/cxx-stl/gnu-
> > > libstdc++/4.8/include/bits/atomic_base.h:577:70: error: failure memory
> > > model cannot be stronger than success memory model for
> > > '__atomic_compare_exchange' return __atomic_compare_exchange_n(&_M_i,
> > > &__i1, __i2, 0, __m1, __m2); ^ /opt/android/ndk/sources/cxx-stl/gnu-
> > > libstdc++/4.8/include/bits/atomic_base.h:577:70: error: failure memory
> > > model cannot be stronger than success memory model for
> > > '__atomic_compare_exchange' return __atomic_compare_exchange_n(&_M_i,
> > > &__i1, __i2, 0, __m1, __m2); ^ /opt/android/ndk/sources/cxx-stl/gnu-
> > > libstdc++/4.8/include/bits/atomic_base.h:577:70: error: failure memory
> > > model cannot be stronger than success memory model for
> > > '__atomic_compare_exchange' return __atomic_compare_exchange_n(&_M_i,
> > > &__i1, __i2, 0, __m1, __m2); ^ /opt/android/ndk/sources/cxx-stl/gnu-
> > > libstdc++/4.8/include/bits/atomic_base.h:577:70: error: failure memory
> > > model cannot be stronger than success memory model for
> > > '__atomic_compare_exchange' return __atomic_compare_exchange_n(&_M_i,
> > > &__i1, __i2, 0, __m1, __m2); ^
> > > /opt/android/ndk/sources/cxx-stl/gnu-libstdc++/4.8/include/bits/atomic_b
> > > a
> > > se .h: In member function 'virtual void
> > > Qt3DRender::Render::Entity::initializeFromPeer(const
> > > QNodeCreatedChangeBasePtr&)':
> > > /opt/android/ndk/sources/cxx-stl/gnu-
> > > libstdc++/4.8/include/bits/atomic_base.h:577:70: error: failure memory
> > > model cannot be stronger than success memory model for
> > > '__atomic_compare_exchange' return __atomic_compare_exchange_n(&_M_i,
> > > &__i1, __i2, 0, __m1, __m2); ^
> > > 
> > > The patch makes no direct use of atomics, only via QSharedPointer.
> > > BogDan
> > > reports that it builds fine with latest NDK.
> > > 
> > > Is this a genuine error on our part or some corner case issue with the
> > > CI's installed NDK?
> > > 
> > > I'm at a total loss with this one and have no idea how to
> > > investigate/fix.
> > > 
> > > Any help would be greatly appreciated. :)
> > > 
> > > Kind regards,
> > > 
> > > Sean
> > > --
> > > Dr Sean Harmer | sean.harmer at kdab.com | Managing Director UK
> > > Klarälvdalens Datakonsult AB, a KDAB Group company
> > > Tel. UK +44 (0)1625 809908, Sweden (HQ) +46-563-540090
> > > KDAB - Qt Experts - Platform-independent software solutions
> > > _______________________________________________
> > > Development mailing list
> > > Development at qt-project.org
> > > http://lists.qt-project.org/mailman/listinfo/development

-- 
Dr Sean Harmer | sean.harmer at kdab.com | Managing Director UK
KDAB (UK) Ltd, a KDAB Group company
Tel. +44 (0)1625 809908; Sweden (HQ) +46-563-540090
Mobile: +44 (0)7545 140604
KDAB - Qt Experts



More information about the Development mailing list