[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#647265: qt4-x11: FTBFS on sparc64: needs fixing to the atomic code



Package: qt4-x11
Version: 4.7.3-8
Severity: important
Tags: patch upstream
Justification: fails to build from source
User: debian-sparc@lists.debian.org
Usertags: sparc64
Forwarded: https://bugreports.qt.nokia.com/browse/QTBUG-22479

qt4-x11 fails to build from source on sparc64 due to issues in the
atomic code, leading to the following error:

| 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 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.

-- System Information:
Debian Release: wheezy/sid
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: sparc64

Kernel: Linux 2.6.32-bpo.5-sparc64-smp (SMP w/32 CPU cores)
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash
Description: Fix atomic support on sparc64
Author: Aurelien Jarno <aurel32@debian.org> 
Forwarded: https://bugreports.qt.nokia.com/browse/QTBUG-22479
Last-Update: 2011-11-01

---
 qatomic_sparc.h |   18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

--- a/src/corelib/arch/qatomic_sparc.h
+++ b/src/corelib/arch/qatomic_sparc.h
@@ -127,17 +127,19 @@
     Q_CORE_EXPORT int q_atomic_fetch_and_add_acquire_int(volatile int *ptr, int value);
     Q_CORE_EXPORT int q_atomic_fetch_and_add_release_int(volatile int *ptr, int value);
 
-    Q_CORE_EXPORT int q_atomic_test_and_set_ptr(volatile void *ptr, void *expected, void *newval);
+    Q_CORE_EXPORT int q_atomic_test_and_set_ptr(volatile void *ptr,
+                                                const void *expected,
+                                                const void *newval);
     Q_CORE_EXPORT int q_atomic_test_and_set_acquire_ptr(volatile void *ptr,
-                                                        void *expected,
-                                                        void *newval);
+                                                        const void *expected,
+                                                        const void *newval);
     Q_CORE_EXPORT int q_atomic_test_and_set_release_ptr(volatile void *ptr,
-                                                        void *expected,
-                                                        void *newval);
+                                                        const void *expected,
+                                                        const void *newval);
 
-    Q_CORE_EXPORT void *q_atomic_set_ptr(volatile void *ptr, void *newval);
-    Q_CORE_EXPORT void *q_atomic_fetch_and_store_acquire_ptr(volatile void *ptr, void *newval);
-    Q_CORE_EXPORT void *q_atomic_fetch_and_store_release_ptr(volatile void *ptr, void *newval);
+    Q_CORE_EXPORT void *q_atomic_set_ptr(volatile void *ptr, const void *newval);
+    Q_CORE_EXPORT void *q_atomic_fetch_and_store_acquire_ptr(volatile void *ptr, const void *newval);
+    Q_CORE_EXPORT void *q_atomic_fetch_and_store_release_ptr(volatile void *ptr, const void *newval);
 
     Q_CORE_EXPORT void *q_atomic_fetch_and_add_ptr(volatile void *ptr, int value);
     Q_CORE_EXPORT void *q_atomic_fetch_and_add_acquire_ptr(volatile void *ptr, int value);

Reply to: