diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2020-01-31 16:05:52 +0100 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2020-02-04 11:07:15 +0100 |
commit | ac46c9f6ce9ef757e0ccba8a283cb0efabaef56e (patch) | |
tree | 9c2768c78fb5cc37024d5518115f1b7998f5f72b /src/imports/particles/plugin.cpp | |
parent | 6e111f96e307501ec02a620fa3124fd3ce9c9193 (diff) |
Synthetically reference type registration functions
Add unused volatile pointers to the type registration functions in each
import plugin. We need to do this in order to prevent the linker from
optimizing the registration away. There are two ways for this to happen:
When linking statically, the linker will examine the referenced symbols
on a per-object base and leave out all unreferenced objects. When
linking dynamically, the linker may do the same on a per-library base
and drop any unreferenced libraries from the dependencies. Forcing a
reference to the type registration function prevents both.
The volatile technique allows us to remove the previous qCDebug() hack.
Having an unused volatile auto variable should only result in a single
memory read as runtime overhead. The qCDebug() technique would generate
a read and a block of mostly dead code (as no one would ever use that
logging category).
Fixes: QTBUG-81622
Change-Id: I255667276dfd355b19baa17b1aad3db406bf1954
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/imports/particles/plugin.cpp')
-rw-r--r-- | src/imports/particles/plugin.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/imports/particles/plugin.cpp b/src/imports/particles/plugin.cpp index 4f319db9f1..6629a660af 100644 --- a/src/imports/particles/plugin.cpp +++ b/src/imports/particles/plugin.cpp @@ -50,7 +50,12 @@ class QtQuick2ParticlesPlugin : public QQmlExtensionPlugin Q_OBJECT Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) public: - QtQuick2ParticlesPlugin(QObject *parent = nullptr) : QQmlExtensionPlugin(parent) { } + QtQuick2ParticlesPlugin(QObject *parent = nullptr) : QQmlExtensionPlugin(parent) + { + volatile auto registration = &qml_register_types_QtQuick_Particles; + Q_UNUSED(registration); + } + void registerTypes(const char *uri) override { Q_UNUSED(uri); |