QString constructor segfault. qshaderdescription.cpp corruption
-
A few function calls past our main function a QString gets constructed and segfaults with the following stack trace
(gdb) bt #0 0x000000000044d60b in int QAtomicOps<int>::loadRelaxed<int>(std::atomic<int> const&) () #1 0x000000000044ceb8 in QBasicAtomicInteger<int>::loadRelaxed() const () #2 0x000000000044c46e in QtPrivate::RefCount::ref() () #3 0x000000000044ca67 in QString::QString(QString const&) () ...I assumed that our project was doing something unsafe with memory and recompiled with libefence so that I could figure out what was causing the problem.
(gdb) bt #0 QString::fromLatin1_helper (str=str@entry=0x7ffff5b6562b "float", size=size@entry=5) at text/qstring.cpp:5462 #1 0x00007ffff563ac75 in QString::QString (aLatin1=..., this=0x7ffff5e7d7c0 <typeTab>) at ../../include/QtCore/../../src/corelib/text/qstring.h:1067 #2 __static_initialization_and_destruction_0 (__initialize_p=1, __priority=65535) at rhi/qshaderdescription.cpp:666 #3 _GLOBAL__sub_I_qshaderdescription.cpp(void) () at rhi/qshaderdescription.cpp:1513 #4 0x00007ffff7de3e0a in call_init (l=<optimized out>, argc=argc@entry=1, argv=argv@entry=0x7fffffffdbd8, env=env@entry=0x7fffffffdbe8) at dl-init.c:72 #5 0x00007ffff7de3f0a in call_init (env=0x7fffffffdbe8, argv=0x7fffffffdbd8, argc=1, l=<optimized out>) at dl-init.c:30 #6 _dl_init (main_map=0x7ffff7ffe1f0, argc=1, argv=0x7fffffffdbd8, env=0x7fffffffdbe8) at dl-init.c:119 #7 0x00007ffff7dd501a in _dl_start_user () from /lib64/ld-linux-x86-64.so.2This suggests that the problem is the result of a static variable in the gui/rhi component using QStrings as static variables before they're ready. Checking git I found that these keys were changed to const char* and this change/fix should be live in recent versions of Qt 6.
Apart from upgrading our entire software to Qt 6 is there anything I can do to make this work? I feel like if the issue should be experienced by more Linux developers since as far as I know we're not actually using any of the features in RHI directly. We currently have software working with Qt 5.15.2 on Windows but struggling with the Linux port.
-
Hi and welcome to devnet,
Can you trigger that with a minimal compilable example ?