Details
-
Bug
-
Resolution: Done
-
Not Evaluated
-
4.7.3
-
None
-
sparc64-unknown-linux-gnu
-
1ee0985319a0f41be12c3c8ff3813a74b43835e f668407b30868ef137016b70011ce888e7950d4e
Description
Qt fails to build on linux/sparc64 with the following problem:
g++ -c -m64 -pipe -I/usr/include/freetype2 -I/usr/include/dbus-1.0 -I/usr/lib/sparc64-linux-gnu/dbus-1.0/include -O2 -fvisibility=hidden -fvisibility-inlines-hidden -Wall -W -D_REENTRANT -fPIC -DQT_SHARED -DQT_BUILD_DBUS_LIB -DDBUS_API_SUBJECT_TO_CHANGE -DQT_LINKED_LIBDBUS -DQT_NO_CAST_TO_ASCII -DQT_ASCII_CAST_WARNINGS -DQT3_SUPPORT -DQT_MOC_COMPAT -DQT_USE_FAST_OPERATOR_PLUS -DQT_USE_FAST_CONCATENATION -DQT_NO_DEBUG -DQT_XML_LIB -DQT_CORE_LIB -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -I../../mkspecs/linux-g++-64 -I. -I../../include/QtCore -I../../include/QtXml -I../../include -I../../include/QtDBus -I.rcc/release-shared -I.moc/release-shared -o .obj/release-shared/qdbusabstractadaptor.o qdbusabstractadaptor.cpp
In file included from ../../include/QtCore/qatomic_sparc.h:1:0,
from ../../include/QtCore/../../src/corelib/arch/qatomic_arch.h:78,
from ../../include/QtCore/qatomic_arch.h:1,
from ../../include/QtCore/../../src/corelib/thread/qbasicatomic.h:227,
from ../../include/QtCore/qbasicatomic.h:1,
from ../../include/QtCore/../../src/corelib/thread/qatomic.h:46,
from ../../include/QtCore/qatomic.h:1,
from ../../include/QtCore/../../src/corelib/tools/qbytearray.h:45,
from ../../include/QtCore/qbytearray.h:1,
from ../../include/QtCore/../../src/corelib/tools/qstring.h:46,
from ../../include/QtCore/qstring.h:1,
from ../../include/QtCore/../../src/corelib/kernel/qobject.h:48,
from ../../include/QtCore/qobject.h:1,
from ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:45,
from ../../include/QtCore/qcoreapplication.h:1,
from qdbusintegrator.cpp:42:
../../include/QtCore/../../src/corelib/arch/qatomic_sparc.h: In member function 'bool QBasicAtomicPointer<T>::testAndSetOrdered(T*, T*) [with T = const QString]':
qdbusintegrator.cpp:74:1: instantiated from here
../../include/QtCore/../../src/corelib/arch/qatomic_sparc.h:238:85: error: invalid conversion from 'const void*' to 'void*' [-fpermissive]
../../include/QtCore/../../src/corelib/arch/qatomic_sparc.h:131:23: error: initializing argument 2 of 'int q_atomic_test_and_set_acquire_ptr(volatile void*, void*, void*)' [-fpermissive]
../../include/QtCore/../../src/corelib/arch/qatomic_sparc.h:238:85: error: invalid conversion from 'const void*' to 'void*' [-fpermissive]
../../include/QtCore/../../src/corelib/arch/qatomic_sparc.h:131:23: error: initializing argument 3 of 'int q_atomic_test_and_set_acquire_ptr(volatile void*, void*, void*)' [-fpermissive]
make[3]: *** [.obj/release-shared/qdbusintegrator.o] Error 1
The problem is that the type of some arguments in src/corelib/arch/qatomic_sparc.h are missing a const attribute. In that case the second and third arguments of q_atomic_test_and_set_acquire_ptr() are only read in the assembly code (src/corelib/arch/sparc/qatomic64.s), so it's possible to declare them const.
This is the only thing required to get Qt building on linux/sparc64, but I preferred to also change other functions with missing const attribute, so that the same kind of problem doesn't appear again in the future. You'll find the patch as an attachement
Attachments
For Gerrit Dashboard: QTBUG-22479 | ||||||
---|---|---|---|---|---|---|
# | Subject | Branch | Project | Status | CR | V |
18689,1 | Fix signature of q_atomic_test_and_set_ptr. | 4.8 | qt/qt | Status: MERGED | +2 | 0 |
24413,1 | Fix atomics on SPARC | master | qt/qtbase | Status: MERGED | +2 | 0 |
25051,1 | Fix atomics on SPARC | 4.8 | qt/qt | Status: MERGED | +2 | 0 |