[Development] Problem loading plugins with gcc 4.9.2
Thiago Macieira
thiago.macieira at intel.com
Wed Mar 4 01:52:43 CET 2015
On Tuesday 03 March 2015 22:14:55 Sergio Martins wrote:
> In frame #2, we do loader(), which should create an instance of the
> "/platforms" QFactoryLoader, but instead, it calls innerFunction() of a
> global static of another translation unit (QFactoryLoader of "/accessible"
> plugins).
>
> A simple fix is to use "loader" instead of "loader()"
Definitely GCC or linker bug.
As you can see in your backtrace, all of this is in an anonymous namespace, so
qplatformintegrationfactory.cpp cannot affect qaccessible.cpp.
Since we're seeing both operator() and the innerFunction frames, I assume you
compiled in debug mode. Correct?
Anyway, I have GCC 4.9.2, Binutils 2.25.0 (using gold) and I cannot reproduce
in either debug, regular release or LTO release modes. I have 8 different
global statics called "loader" in QtGui:
$ nm -C libQt5Gui.so.5 | grep ::Q_QGS_loader::guard\$
00000000006a5750 b (anonymous namespace)::Q_QGS_loader::guard
00000000006a59c0 b (anonymous namespace)::Q_QGS_loader::guard
00000000006a5a20 b (anonymous namespace)::Q_QGS_loader::guard
00000000006a5ac0 b (anonymous namespace)::Q_QGS_loader::guard
00000000006a5b40 b (anonymous namespace)::Q_QGS_loader::guard
00000000006a61b0 b (anonymous namespace)::Q_QGS_loader::guard
00000000006a6200 b (anonymous namespace)::Q_QGS_loader::guard
00000000006a6374 b (anonymous namespace)::Q_QGS_loader::guard
(The mangled name for all of those is the same:
_ZN12_GLOBAL__N_112Q_QGS_loader5guardE)
Which matches the source code:
$ git --no-pager grep Q_GLOBAL_STATIC.*\\bloader
accessible/qaccessible.cpp:Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader,
image/qicon.cpp:Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader,
image/qimagereader.cpp:Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader,
image/qimagewriter.cpp:Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader,
kernel/qgenericpluginfactory.cpp:Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader,
loader,
kernel/qplatforminputcontextfactory.cpp:Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader,
loader,
kernel/qplatformintegrationfactory.cpp:Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader,
loader,
kernel/qplatformthemefactory.cpp:Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader,
loader,
--
Thiago Macieira - thiago.macieira (AT) intel.com
Software Architect - Intel Open Source Technology Center
More information about the Development
mailing list