#973659 qtdeclarative5-dev-tools: qmlcachegen segfaults on hppa

Package:
qtdeclarative5-dev-tools
Source:
qtdeclarative-opensource-src
Description:
Qt 5 declarative development programs
Submitter:
John David Anglin
Date:
2025-03-28 01:09:02 UTC
Severity:
normal
#973659#5
Date:
2020-11-02 21:18:35 UTC
From:
To:
Dear Maintainer,

The qtgraphicaleffects-opensource-src package fails to build on hppa
because qmlcachegen faults with out-of bounds references:

do_page_fault() command='qmlcachegen' type=15 address=0xf98c4020 in qmlcachegen[10000+c5000]
trap #15: Data TLB miss fault, vm_start = 0xf90c4000, vm_end = 0xf98c4000

do_page_fault() command='qmlcachegen' type=15 address=0xfaed5000 in libQt5Core.so.5.15.1[f7f28000+5e6000]
trap #15: Data TLB miss fault, vm_start = 0xfa6d5000, vm_end = 0xfaed5000

do_page_fault() command='qmlcachegen' type=15 address=0xf99b9000 in libQt5Core.so.5.15.1[f7f28000+5e6000]
trap #15: Data TLB miss fault, vm_start = 0xf91b9000, vm_end = 0xf99b9000

See
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=973646
for details regarding the qtgraphicaleffects-opensource-src build.

Regards,
Dave Anglin

#973659#10
Date:
2020-11-05 16:25:37 UTC
From:
To:
The segfault is caused by stack overflow.  On hppa, the kernel config parameter CONFIG_MAX_STACK_SIZE_MB
sets the maximum stack size.  This is because the main stack is allocated at the top of memory and the stack grows
up.  256 MB is not enough.

dave@mx3210:~/debian/qtgraphicaleffects-opensource-src/qtgraphicaleffects-openso
urce-src-5.15.1/src/effects/private$ gdb -c core /usr/lib/qt5/bin/qmlcachegen
GNU gdb (Debian 9.2-1+b1) 9.2
Copyright (C) 2020 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "hppa-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/lib/qt5/bin/qmlcachegen...
Reading symbols from /usr/lib/debug/.build-id/c5/9795c94efa883bf7fe6d0716815c3d08437aaf.debug...
[New LWP 17773]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/hppa-linux-gnu/libthread_db.so.1".
Core was generated by `/usr/lib/qt5/bin/qmlcachegen -o ../../../qml/QtGraphicalEffects/private/DropSha'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x000ad7e8 in QMapData<QString, QV4::Compiler::Context::Member>::findNode (
    akey=..., this=<optimized out>, this=<optimized out>)
    at /usr/include/hppa-linux-gnu/qt5/QtCore/qmap.h:281
281     QMapNode<Key, T> *QMapData<Key, T>::findNode(const Key &akey) const
(gdb) disass $pc-16,$pc+16
Dump of assembler code from 0xad7d8 to 0xad7f8:
   0x000ad7d8 <QVector<QV4::Moth::BytecodeGenerator::I>::append(QV4::Moth::BytecodeGenerator::I const&)+316>:   stw,ma r21,4(r20)
   0x000ad7dc <QVector<QV4::Moth::BytecodeGenerator::I>::append(QV4::Moth::BytecodeGenerator::I const&)+320>:   b,l 0xad754
<QVector<QV4::Moth::BytecodeGenerator::I>::append(QV4::Moth::BytecodeGenerator::I const&)+184>,r0
   0x000ad7e0 <QVector<QV4::Moth::BytecodeGenerator::I>::append(QV4::Moth::BytecodeGenerator::I const&)+324>:   ldw 0(r3),r20
   0x000ad7e4 <QMapData<QString, QV4::Compiler::Context::Member>::findNode(QString const&) const+0>:    stw rp,-14(sp)
=> 0x000ad7e8 <QMapData<QString, QV4::Compiler::Context::Member>::findNode(QString const&) const+4>:    stw,ma r6,40(sp)
   0x000ad7ec <QMapData<QString, QV4::Compiler::Context::Member>::findNode(QString const&) const+8>:    ldi 0,r6
   0x000ad7f0 <QMapData<QString, QV4::Compiler::Context::Member>::findNode(QString const&) const+12>:   stw r5,-3c(sp)
   0x000ad7f4 <QMapData<QString, QV4::Compiler::Context::Member>::findNode(QString const&) const+16>:   copy r25,r5
End of assembler dump.
(gdb) bt
#0  0x000ad7e8 in QMapData<QString, QV4::Compiler::Context::Member>::findNode (
    akey=..., this=<optimized out>, this=<optimized out>)
    at /usr/include/hppa-linux-gnu/qt5/QtCore/qmap.h:281
#1  0x000ad970 in QMap<QString, QV4::Compiler::Context::Member>::constFind (
    akey=..., this=<optimized out>)
    at /usr/include/hppa-linux-gnu/qt5/QtCore/qmap.h:853
#2  QMap<QString, QV4::Compiler::Context::Member>::find (akey=...,
    this=<optimized out>) at /usr/include/hppa-linux-gnu/qt5/QtCore/qmap.h:855
#3  QV4::Compiler::Context::findMember (name=..., this=<optimized out>)
    at ../qml/compiler/qv4compilercontext_p.h:304
#4  QV4::Compiler::Context::resolveName (this=0xebea8, name=...,
    accessLocation=...) at ../qml/compiler/qv4compilercontext.cpp:137
#5  0x000374e4 in QV4::Compiler::Codegen::referenceForName (this=0xee3674b8,
    name=..., isLhs=168, accessLocation=...)
    at ../qml/compiler/qv4codegen.cpp:2374
#6  0x00038320 in QV4::Compiler::Codegen::Reference::storeAccumulator (
    this=0xee367494)
    at ../../include/QtQml/5.15.1/QtQml/private/../../../../../src/qml/common/qqmljssourcelocation_p.h:63
#7  0x000384c8 in QV4::Compiler::Codegen::Reference::storeConsumeAccumulator (
    this=<optimized out>) at ../qml/compiler/qv4codegen.cpp:4130
#8  0x00038640 in QV4::Compiler::Codegen::Reference::doStoreOnStack (this=0x0,
    slotIndex=<optimized out>) at ../qml/compiler/qv4codegen.cpp:4186
--Type <RET> for more, q to quit, c to continue without paging--
#9  0x00038348 in QV4::Compiler::Codegen::Reference::storeOnStack (this=0x0)
    at ../qml/compiler/qv4codegen.cpp:4231
#10 QV4::Compiler::Codegen::Reference::storeAccumulator (this=0xee367494)
    at ../qml/compiler/qv4codegen.cpp:4231
#11 0x000384c8 in QV4::Compiler::Codegen::Reference::storeConsumeAccumulator (
    this=<optimized out>) at ../qml/compiler/qv4codegen.cpp:4130
#12 0x00038640 in QV4::Compiler::Codegen::Reference::doStoreOnStack (this=0x0,
    slotIndex=<optimized out>) at ../qml/compiler/qv4codegen.cpp:4186
#13 0x00038348 in QV4::Compiler::Codegen::Reference::storeOnStack (this=0x0)
    at ../qml/compiler/qv4codegen.cpp:4231
#14 QV4::Compiler::Codegen::Reference::storeAccumulator (this=0xee367494)
    at ../qml/compiler/qv4codegen.cpp:4231
#15 0x000384c8 in QV4::Compiler::Codegen::Reference::storeConsumeAccumulator (
    this=<optimized out>) at ../qml/compiler/qv4codegen.cpp:4130
#16 0x00038640 in QV4::Compiler::Codegen::Reference::doStoreOnStack (this=0x0,
    slotIndex=<optimized out>) at ../qml/compiler/qv4codegen.cpp:4186
#17 0x00038348 in QV4::Compiler::Codegen::Reference::storeOnStack (this=0x0)
    at ../qml/compiler/qv4codegen.cpp:4231
#18 QV4::Compiler::Codegen::Reference::storeAccumulator (this=0xee367494)
    at ../qml/compiler/qv4codegen.cpp:4231
#19 0x000384c8 in QV4::Compiler::Codegen::Reference::storeConsumeAccumulator (
    this=<optimized out>) at ../qml/compiler/qv4codegen.cpp:4130
#20 0x00038640 in QV4::Compiler::Codegen::Reference::doStoreOnStack (this=0x0,
--Type <RET> for more, q to quit, c to continue without paging--q
Quit

How much stack does qmlcachegen typically need?

Another possibility is doStoreOnStack doesn't work on hppa.

Regards,
Dave Anglin

#973659#15
Date:
2020-11-05 17:20:44 UTC
From:
To:
Hi!

No idea, but I guess it depends on the size of QML file being cached.

I think the complete QML engine may be broken on hppa, not just qmlcachegen.

A lot of tests are failing — search for FAIL! in the build log:

https://buildd.debian.org/status/fetch.php?pkg=qtdeclarative-opensource-src&arch=hppa&ver=5.14.2%2Bdfsg-3&stamp=1595527978

#973659#20
Date:
2020-11-05 20:49:47 UTC
From:
To:
The attached patch fixes qtdeclarative-opensource-src-5.15.1+dfsg.orig/src/3rdparty/masm/wtf/Platform.h for hppa.  That's
the only platform configuration that I could find in the package.

The PA-RISC architecture is big endian.  Perhaps this needs to be defined somewhere else as well?

Regards,
Dave Anglin

#973659#25
Date:
2020-11-07 18:20:24 UTC
From:
To:
Hi John!

I think the problem is not that hppa is not detected, but rather that the code
has some assumptions about the stack growing down. The QML engine has a lot of
low-level code...

Can you check if your patch actually makes some tests pass that failed without
it?

Qt uses this file from qtbase:

https://code.qt.io/cgit/qt/qtbase.git/tree/src/corelib/global/qprocessordetection.h

which falls back to gcc's __BYTE_ORDER__ macro for unknown architectures.
So it should work fine if that macro is defined correctly on hppa.

#973659#30
Date:
2020-11-07 23:07:02 UTC
From:
To:
Hi Dmitry,
That's what I was afraid of.  If these assumptions are localized, it would help if you could
point them out.  The code seems to have its own stack implementation.
I revised the patch somewhat but it doesn't help much.
As far as I know, the __BYTE_ORDER__ macro is defined correctly for hppa.

Regards,
Dave

#973659#35
Date:
2020-11-09 18:35:59 UTC
From:
To:
But I can suggest you to contact upstream (via the mailing list or via
bugreports.qt.io) and ask them where such code may be present.

I only found one old bug report and it was fixed:
https://bugreports.qt.io/browse/QTBUG-44268

#973659#40
Date:
2021-02-01 21:47:47 UTC
From:
To:
I think we have to go back to the original backtrace and the test failures.

I thought that for a bit that we might have a problem similar to ia64 and sparc64 but
hppa is currently 32-bit.

Test tst_qjsvalueiterator fails as follows:
dave@mx3210:~/debian/qtdeclarative-opensource-src$
/home/dave/debian/qtdeclarative-opensource-src/qtdeclarative-opensource-src-5.15.2+dfsg/tests/auto/qml/qjsvalueiterator/tst_qjsvalueiterator
********* Start testing of tst_QJSValueIterator *********
Config: Using QtTest library 5.15.2, Qt 5.15.2 (unknown-big_endian-ilp32 shared (dynamic) release build; by GCC 10.2.1 20210110), debian unknown
PASS   : tst_QJSValueIterator::initTestCase()
PASS   : tst_QJSValueIterator::iterateForward(no properties)
PASS   : tst_QJSValueIterator::iterateForward(foo=bar)
PASS   : tst_QJSValueIterator::iterateForward(foo=bar, baz=123)
PASS   : tst_QJSValueIterator::iterateForward(foo=bar, baz=123, rab=oof)
PASS   : tst_QJSValueIterator::iterateArray(no elements)
PASS   : tst_QJSValueIterator::iterateArray(0=foo, 1=barr)
PASS   : tst_QJSValueIterator::iterateArray(0=foo, 3=barr)

=== Received signal at function time: 70ms, total time: 310ms, dumping stack ===
GNU gdb (Debian 10.1-1.7) 10.1.90.20210103-git
Copyright (C) 2021 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "hppa-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word".
Attaching to process 2844
[New LWP 2845]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/hppa-linux-gnu/libthread_db.so.1".
clone () at ../sysdeps/unix/sysv/linux/hppa/clone.S:83
(gdb)
Thread 2 (Thread 0xef8b3400 (LWP 2845) "QThread"):
#0  0xf594183c in _int_malloc (av=0x0, bytes=4010488392) at malloc.c:4116
        p = <optimized out>
        iters = <optimized out>
        nb = 164456
        idx = 1
        bin = <optimized out>
        victim = 0x28240
        size = 210
        victim_index = <optimized out>
        remainder = 0xffffffff
        remainder_size = 4294803050
        block = <optimized out>
        bit = <optimized out>
        map = 0
        fwd = <optimized out>
        bck = <optimized out>
        tcache_unsorted_count = 164424
        tcache_nb = 4010488392
        tc_idx = 0
        return_cached = <optimized out>
        __PRETTY_FUNCTION__ = "_int_malloc"
#1  0x00000000 in ?? ()
No symbol table info available.
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

^CDetaching from program:
/home/dave/debian/qtdeclarative-opensource-src/qtdeclarative-opensource-src-5.15.2+dfsg/tests/auto/qml/qjsvalueiterator/tst_qjsvalueiterator,
process 2844
[Inferior 1 (process 2844) detached]
=== End of stack trace ===
QFATAL : tst_QJSValueIterator::iterateString() Received signal 11
         Function time: 70ms Total time: 310ms
FAIL!  : tst_QJSValueIterator::iterateString() Received a fatal error.
   Loc: [Unknown file(0)]
Totals: 8 passed, 1 failed, 0 skipped, 0 blacklisted, 258862ms
********* Finished testing of tst_QJSValueIterator *********
Aborted (core dumped)
dave@mx3210:~/debian/qtdeclarative-opensource-src$ gdb -c core
GNU gdb (Debian 10.1-1.7) 10.1.90.20210103-git
Copyright (C) 2021 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "hppa-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word".

warning: Can't open file /memfd:JSGCHeap:QtQml (deleted) during file-backed mapping note processing

warning: Can't open file /memfd:JSVMStack:QtQml (deleted) during file-backed mapping note processing
[New LWP 2844]
[New LWP 2845]
Core was generated by `/home/dave/debian/qtdeclarative-opensource-src/qtdeclarative-opensource-src-5.1'.
Program terminated with signal SIGABRT, Aborted.
#0  0xf5932b5c in ?? ()
[Current thread is 1 (LWP 2844)]
(gdb) quit

The test again fails because of a stack overflow.

gdb -c tests/auto/qml/qjsvalueiterator/core tests/auto/qml/qjsvalueiterator/tst_qjsvalueiterator
GNU gdb (Debian 10.1-1.7) 10.1.90.20210103-git
Copyright (C) 2021 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "hppa-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from tests/auto/qml/qjsvalueiterator/tst_qjsvalueiterator...

warning: Can't open file /memfd:JSGCHeap:QtQml (deleted) during file-backed mapping note processing

warning: Can't open file /memfd:JSVMStack:QtQml (deleted) during file-backed mapping note processing

warning: core file may not match specified executable file.
[New LWP 20351]
[New LWP 20352]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/hppa-linux-gnu/libthread_db.so.1".
Core was generated by `./tst_qjsvalueiterator'.
Program terminated with signal SIGABRT, Aborted.
#0  0xf5d32b5c in __vsnprintf_internal (
--Type <RET> for more, q to quit, c to continue without paging--
    string=0x2 <error: Cannot access memory at address 0x2>,
    maxlen=4144215688, format=0x0, args=0x8, mode_flags=<optimized out>)
    at vsnprintf.c:95
95      vsnprintf.c: No such file or directory.
[Current thread is 1 (Thread 0xf7afa040 (LWP 20351))]
(gdb) bt
#0  0xf5d32b5c in __vsnprintf_internal (
    string=0x2 <error: Cannot access memory at address 0x2>,
    maxlen=4144215688, format=0x0, args=0x8, mode_flags=<optimized out>)
    at vsnprintf.c:95
#1  0xf5cdaa00 in __GI_abort () at abort.c:79
#2  0xf688177c in qt_message_fatal (message=<synthetic pointer>...,
    context=...) at global/qlogging.cpp:1914
#3  QMessageLogger::fatal (this=<optimized out>, msg=<optimized out>)
    at global/qlogging.cpp:893
#4  0xf7001eb8 in ?? () from /usr/lib/hppa-linux-gnu/libQt5Test.so.5
#5  <signal handler called>
#6  0xf7247d90 in QHash<QString, int>::findNode (this=0xf83b14b8, akey=...,
    h=733811337) at /usr/include/hppa-linux-gnu/qt5/QtCore/qhash.h:924
#7  0xf7244acc in QHash<QString, int>::findNode (ahp=0x0, akey=...,
    this=0xf83b14b8) at /usr/include/hppa-linux-gnu/qt5/QtCore/qhash.h:950
#8  QHash<QString, int>::constFind (akey=..., this=0xf83b14b8)
    at /usr/include/hppa-linux-gnu/qt5/QtCore/qhash.h:907
#9  QV4::Compiler::StringTableGenerator::registerString (this=0xf83b14b8,
    str=...) at compiler/qv4compiler.cpp:67
#10 0xf7254f34 in QV4::Compiler::JSUnitGenerator::registerString (str=...,
    this=<optimized out>)
    at ../../include/QtQml/5.15.2/QtQml/private/../../../../../src/qml/compiler/qv4compiler_p.h:118
--Type <RET> for more, q to quit, c to continue without paging--
#11 QV4::Compiler::Codegen::registerString (name=..., this=<optimized out>)
    at compiler/qv4codegen_p.h:512
#12 QV4::Compiler::Codegen::Reference::nameAsIndex (this=0xf8badcf8)
    at compiler/qv4codegen_p.h:339
#13 QV4::Compiler::Codegen::Reference::loadInAccumulator (this=0xf8badcf8)
    at compiler/qv4codegen.cpp:4425
#14 0xf725819c in QV4::Compiler::Codegen::Reference::doStoreOnStack (
    this=0xf8badec8, slotIndex=<optimized out>) at compiler/qv4codegen.cpp:4185
#15 0xf725845c in QV4::Compiler::Codegen::Reference::storeOnStack (
    this=<optimized out>) at compiler/qv4codegen.cpp:4157
#16 0xf7257eb8 in QV4::Compiler::Codegen::Reference::storeAccumulator (
    this=0xf83b1494) at compiler/qv4codegen.cpp:4231
#17 0xf7258038 in QV4::Compiler::Codegen::Reference::storeConsumeAccumulator (
    this=<optimized out>) at compiler/qv4codegen.cpp:4130
#18 0xf72581b0 in QV4::Compiler::Codegen::Reference::doStoreOnStack (
    this=0xf8badec8, slotIndex=<optimized out>) at compiler/qv4codegen.cpp:4186
#19 0xf725845c in QV4::Compiler::Codegen::Reference::storeOnStack (
    this=<optimized out>) at compiler/qv4codegen.cpp:4157
#20 0xf7257eb8 in QV4::Compiler::Codegen::Reference::storeAccumulator (
    this=0xf83b1494) at compiler/qv4codegen.cpp:4231
#21 0xf7258038 in QV4::Compiler::Codegen::Reference::storeConsumeAccumulator (
    this=<optimized out>) at compiler/qv4codegen.cpp:4130
#22 0xf72581b0 in QV4::Compiler::Codegen::Reference::doStoreOnStack (
--Type <RET> for more, q to quit, c to continue without paging--q
Quit
(gdb) frame 6
#6  0xf7247d90 in QHash<QString, int>::findNode (this=0xf83b14b8, akey=...,
    h=733811337) at /usr/include/hppa-linux-gnu/qt5/QtCore/qhash.h:924
924     Q_OUTOFLINE_TEMPLATE typename QHash<Key, T>::Node **QHash<Key, T>::findNode(const Key &akey, uint h) const
(gdb) disass $pc-16,$pc+16
Dump of assembler code from 0xf7247d80 to 0xf7247da0:
   0xf7247d80 <_ZN7QVectorIN3QV48Compiler5Class6MethodEED2Ev+96>:       ldw -94(sp),rp
   0xf7247d84 <_ZN7QVectorIN3QV48Compiler5Class6MethodEED2Ev+100>:      bv r0(rp)
   0xf7247d88 <_ZN7QVectorIN3QV48Compiler5Class6MethodEED2Ev+104>:      ldw,mb -80(sp),r4
   0xf7247d8c <_ZNK5QHashI7QStringiE8findNodeERKS0_j+0>:        stw rp,-14(sp)
=> 0xf7247d90 <_ZNK5QHashI7QStringiE8findNodeERKS0_j+4>:        stw,ma r7,80(sp)
   0xf7247d94 <_ZNK5QHashI7QStringiE8findNodeERKS0_j+8>:        copy r25,r7
   0xf7247d98 <_ZNK5QHashI7QStringiE8findNodeERKS0_j+12>:       stw r6,-7c(sp)
   0xf7247d9c <_ZNK5QHashI7QStringiE8findNodeERKS0_j+16>:       copy r24,r6

The fault occurs in at the beginning of _ZNK5QHashI7QStringiE8findNodeERKS0_j when r7 is saved to the stack.

It looks to me like the problem might be in QHash hash lookup.  Something is being called recursively.

Regards,
Dave

#973659#45
Date:
2021-02-02 15:07:52 UTC
From:
To:
In looking at the JS Value encoding in src/qml/common/qv4staticvalue_p.h, I suspect there might be
an issue with NaN/Inf values on hppa.  hppa and early mips used a different representation for signalling
and quiet NaNs.  This would need to be taken into account in converting between JS and hardware values.

It seems hppa is the only big endian ilp32 architecture.

Dave

#973659#50
Date:
2021-02-04 18:25:33 UTC
From:
To:
Hi John!

Thanks a lot for your investigation!

I know almost nothing about hppa, and I don’t have much time to debug this,
but if you provide a patch that will make more tests pass on hppa (and does
not break other architectures), I will be happy to apply it (and help with
pushing it upstream).

Quick search showed me #810859 which looks like a similar problem in a
different package.

#973659#55
Date:
2021-02-04 18:39:04 UTC
From:
To:
That's the dichotomy.  I know hppa but not Qt.  It painful to find the parts of Qt that
depend on endianness, stack layout, and possibly the NaN representation.
Yes.  That bug was caused by the different representation of quiet and signalling NaNs.

Regards,
Dave

#973659#60
Date:
2021-02-05 12:41:07 UTC
From:
To:
I also don’t know the QML / V4 engine code well.

But the qv4staticvalue_p.h file you mentioned has an excellent comment which
describes how it treats different double values:

https://sources.debian.org/src/qtdeclarative-opensource-src/5.15.2+dfsg-4/src/qml/common/qv4staticvalue_p.h/#L140

For NaN, you probably need to check if these masks are correct:

https://sources.debian.org/src/qtdeclarative-opensource-src/5.15.2+dfsg-4/src/qml/common/qv4staticvalue_p.h/#L285
https://sources.debian.org/src/qtdeclarative-opensource-src/5.15.2+dfsg-4/src/qml/common/qv4staticvalue_p.h/#L305

and this method:

https://sources.debian.org/src/qtdeclarative-opensource-src/5.15.2+dfsg-4/src/qml/common/qv4staticvalue_p.h/#L354

From endianness point of view, Qt Declarative should be mostly fine. I looked
at s390x test logs and only few tests are failing:

- qmltestrunner::item-grabber::test_endresult* — for this I filed
https://bugreports.qt.io/browse/QTBUG-56806

- tst_qmldiskcache::regenerateAfterChange() — this one I didn’t notice
  before, and I will investigate it. It regressed somewhere between 5.11.3
  and 5.12.2.

#973659#65
Date:
2021-02-06 17:28:42 UTC
From:
To:
I believe the isNaN method should check for both quiet and signalling NaN encodings (0x00040000 and 0x00080000).
As best I can tell, the quiet and signalling encodings will end up reversed on hppa due to the value returned by qt_qnan().

I believe the "| 0x00020000u" bit is redundant in the definition of Immediate_Mask_32.

However, I don't believe the above issues are the main problem.  The build log history indicates that version 5.11.3-4 was
okay and 5.12.2-1 was bad.  This is indicated by a segmentation fault by tst_parserstress, the first test in the testsuite.

It would be nice to bisect changes between 5.11.3-4 and 5.12.2-1 to find the change that causes the problem.  However,
I'm not away of a suitable archive.

There are also issues building 5.11.3-4 on sid:

qml/qqmlmetatype.cpp: In member function 'void QQmlTypePrivate::insertEnums(const QMetaObject*) const':
qml/qqmlmetatype.cpp:811:60: error: cannot convert 'const QMetaObject::SuperData* const' to 'const QMetaObject* const*' in initialization
  811 |         const QMetaObject * const *related = metaObject->d.relatedMetaObjects;
      |                                              ~~~~~~~~~~~~~~^~~~~~~~~~~~~
~~~~~
      |                                                            |
      |                                                            const QMetaObject::SuperData* const

There was a crashing bug patch in 5.11.3-4 that was removed in 5.12.2-1.  Code was changed.

Regards,
Dave

#973659#70
Date:
2021-02-09 19:02:42 UTC
From:
To:
Hi again!

That's because the relevant code is no longer present in 5.12, see:

https://codereview.qt-project.org/c/qt/qtdeclarative/+/254748

Also I checked the test that fails on s390x, and it turned out to be a
problem in the test. I submitted a patch for it:

https://codereview.qt-project.org/c/qt/qtdeclarative/+/333611

So the code is compatible with big endian, generally speaking. This means
issues on hppa are probably related to stack or other hppa specifics, not
to endianness.

#973659#75
Date:
2021-02-09 20:48:08 UTC
From:
To:
Is there a public qtdeclarative repository that can be cloned with git?
#973659#80
Date:
2021-02-10 10:34:34 UTC
From:
To:

#973659#85
Date:
2025-03-28 01:05:20 UTC
From:
To:
Cher(e) Locataire ,

Sauf erreur de notre part, nous constatons qu'à ce jour, le règlement de
votre loyer mensuel de avril reste en attente.

Nous vous prions de bien vouloir régulariser votre situation dès réception
de ce message.

Nous vous informons également de la mise à jour de nos nouvelles
coordonnées Interac, dont l'adresse email figure ci-dessous.

Dans l'attente de votre règlement, nous vous souhaitons une bonne réception
de ce message.

Merci de votre confiance

Cordialement,
L'équipe comptabilité