On Monday 11 of November 2019, Luke Benes wrote:
Noel,
After
https://cgit.freedesktop.org/libreoffice/core/commit/?id=09f77e8ed51fc64fcc
c6a14e87eed48b2f15a28d loplugin:unusedmethods
The guilty commit is actually
https://cgit.freedesktop.org/libreoffice/core/commit/?id=f43f9b99603736a4d54f550052509eb5f4d04b45 .
The INTRINSICS_CXXFLAGS variable is misdesigned or misused. What happens is
that a source file gets unconditionally compiled with whatever configure
finds to be the most advanced instruction set, and then the code from the
compiled source gets executed unconditionally, without a runtime check. A
runtime check is necessary, as flags like -mavx2 allow the compiler to use
newer instructions even for source code that doesn't explicitly use them.
Looking at tools/qa/cppunit/test_cpuid.cxx, it seems that it doesn't need any
special CXXFLAGS, as it doesn't use them. And if it does need them, then
those parts need to be split to one source file per instruction set, each
compiled with its matching CXXFLAGS, and then another source file (compiled
normally) needs to call them only after doing a runtime check. See the
description of -mavx2 etc. in 'man gcc' and see 'git grep SSE2 sc/' for an
example.
Clang 7 on KDE Neon x86-64, and clang 10-git on openSUSE Tumbleweed i686 is
failing with
[CUT] tools_test
Illegal instruction (core dumped)
[...]
Thread 1 (Thread 0x7f90ea199740 (LWP 8225)):
#0 0x00007f90e824f538 in CppUnit::TestSuiteFactory<(anonymous
namespace)::CpuInstructionSetSupport>::makeTest() () at
/core/workdir/LinkTarget/CppunitTest/libtest_tools_test.so #1
0x00007f90e9d66f3b in
CppUnit::TestFactoryRegistry::addTestToSuite(CppUnit::TestSuite*) () at
/core/workdir/UnpackedTarball/cppunit/src/cppunit/.libs/libcppunit-1.14.so.
0 #2 0x00007f90e9d66e67 in CppUnit::TestFactoryRegistry::makeTest() () at
/core/workdir/UnpackedTarball/cppunit/src/cppunit/.libs/libcppunit-1.14.so.
0 #3 0x00000000004042a9 in (anonymous
namespace)::ProtectedFixtureFunctor::run() const () #4 0x00000000004035be
in main ()
Error: a unit test failed, please do one of:
make CppunitTest_tools_test CPPUNITTRACE="gdb --args"
...
$ cat /proc/cpuinfo
model name : Intel(R) Core(TM) i7 CPU 920 @ 2.67GHz
Newer CPU's like my Broadwell Core i3 Processors have no issue with the
same distros.
--
Luboš Luňák
l.lunak@collabora.com
Context
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.