272 lines
9.1 KiB
Diff
272 lines
9.1 KiB
Diff
|
From e749605ecbe76c392552d0e3a75f47b31bed9ba1 Mon Sep 17 00:00:00 2001
|
||
|
From: Kimmo Ollila <kimmo.ollila@qt.io>
|
||
|
Date: Wed, 11 Nov 2020 12:23:53 +0200
|
||
|
Subject: [PATCH 07/28] Avoid GHS linker to optimize away QML type
|
||
|
registrations
|
||
|
|
||
|
GHS linker optimizes away QML type registrations despite volatile.
|
||
|
To prevent this we add #pragma ghs reference(s) to avoid such linker
|
||
|
optimization.
|
||
|
|
||
|
Fixes: QTBUG-88033
|
||
|
Change-Id: I7c8983506360710185c37028873234b1464847d5
|
||
|
Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
|
||
|
---
|
||
|
src/imports/folderlistmodel/plugin.cpp | 1 +
|
||
|
src/imports/labsanimation/plugin.cpp | 1 +
|
||
|
src/imports/labsmodels/plugin.cpp | 1 +
|
||
|
src/imports/layouts/plugin.cpp | 1 +
|
||
|
src/imports/localstorage/plugin.cpp | 1 +
|
||
|
src/imports/settings/plugin.cpp | 1 +
|
||
|
src/imports/sharedimage/plugin.cpp | 1 +
|
||
|
src/imports/statemachine/plugin.cpp | 1 +
|
||
|
src/imports/testlib/main.cpp | 1 +
|
||
|
src/imports/wavefrontmesh/plugin.cpp | 1 +
|
||
|
src/imports/window/plugin.cpp | 1 +
|
||
|
src/particles/qtquickparticlesglobal_p.h | 1 +
|
||
|
src/qml/qml/qqmlextensionplugin.h | 7 +++++++
|
||
|
src/qml/qtqmlglobal_p.h | 2 ++
|
||
|
src/qmlmodels/qtqmlmodelsglobal_p.h | 1 +
|
||
|
src/qmlworkerscript/qtqmlworkerscriptglobal_p.h | 1 +
|
||
|
src/quick/qtquickglobal_p.h | 1 +
|
||
|
src/quickshapes/qquickshapesglobal_p.h | 2 ++
|
||
|
18 files changed, 26 insertions(+)
|
||
|
|
||
|
diff --git a/src/imports/folderlistmodel/plugin.cpp b/src/imports/folderlistmodel/plugin.cpp
|
||
|
index 7a38769b77..7206df6664 100644
|
||
|
--- a/src/imports/folderlistmodel/plugin.cpp
|
||
|
+++ b/src/imports/folderlistmodel/plugin.cpp
|
||
|
@@ -43,6 +43,7 @@
|
||
|
#include "qquickfolderlistmodel.h"
|
||
|
|
||
|
extern void qml_register_types_Qt_labs_folderlistmodel();
|
||
|
+GHS_KEEP_REFERENCE(qml_register_types_Qt_labs_folderlistmodel);
|
||
|
|
||
|
QT_BEGIN_NAMESPACE
|
||
|
|
||
|
diff --git a/src/imports/labsanimation/plugin.cpp b/src/imports/labsanimation/plugin.cpp
|
||
|
index 9c985f0dcf..c35be764f9 100644
|
||
|
--- a/src/imports/labsanimation/plugin.cpp
|
||
|
+++ b/src/imports/labsanimation/plugin.cpp
|
||
|
@@ -43,6 +43,7 @@
|
||
|
#include "qquickboundaryrule_p.h"
|
||
|
|
||
|
extern void qml_register_types_Qt_labs_animation();
|
||
|
+GHS_KEEP_REFERENCE(qml_register_types_Qt_labs_animation);
|
||
|
|
||
|
QT_BEGIN_NAMESPACE
|
||
|
|
||
|
diff --git a/src/imports/labsmodels/plugin.cpp b/src/imports/labsmodels/plugin.cpp
|
||
|
index ab5e0023a6..b06491e663 100644
|
||
|
--- a/src/imports/labsmodels/plugin.cpp
|
||
|
+++ b/src/imports/labsmodels/plugin.cpp
|
||
|
@@ -51,6 +51,7 @@
|
||
|
#endif
|
||
|
|
||
|
extern void qml_register_types_Qt_labs_qmlmodels();
|
||
|
+GHS_KEEP_REFERENCE(qml_register_types_Qt_labs_qmlmodels);
|
||
|
|
||
|
QT_BEGIN_NAMESPACE
|
||
|
|
||
|
diff --git a/src/imports/layouts/plugin.cpp b/src/imports/layouts/plugin.cpp
|
||
|
index af270c1732..b6ae516eee 100644
|
||
|
--- a/src/imports/layouts/plugin.cpp
|
||
|
+++ b/src/imports/layouts/plugin.cpp
|
||
|
@@ -43,6 +43,7 @@
|
||
|
#include "qquickstacklayout_p.h"
|
||
|
|
||
|
extern void qml_register_types_QtQuick_Layouts();
|
||
|
+GHS_KEEP_REFERENCE(qml_register_types_QtQuick_Layouts);
|
||
|
|
||
|
QT_BEGIN_NAMESPACE
|
||
|
|
||
|
diff --git a/src/imports/localstorage/plugin.cpp b/src/imports/localstorage/plugin.cpp
|
||
|
index e488b3d43c..0291ed4715 100644
|
||
|
--- a/src/imports/localstorage/plugin.cpp
|
||
|
+++ b/src/imports/localstorage/plugin.cpp
|
||
|
@@ -43,6 +43,7 @@
|
||
|
#include <QtQml/qqml.h>
|
||
|
|
||
|
extern void qml_register_types_QtQuick_LocalStorage();
|
||
|
+GHS_KEEP_REFERENCE(qml_register_types_QtQuick_LocalStorage);
|
||
|
|
||
|
QT_BEGIN_NAMESPACE
|
||
|
|
||
|
diff --git a/src/imports/settings/plugin.cpp b/src/imports/settings/plugin.cpp
|
||
|
index e8e640412b..e83147f612 100644
|
||
|
--- a/src/imports/settings/plugin.cpp
|
||
|
+++ b/src/imports/settings/plugin.cpp
|
||
|
@@ -43,6 +43,7 @@
|
||
|
#include "qqmlsettings_p.h"
|
||
|
|
||
|
extern void qml_register_types_Qt_labs_settings();
|
||
|
+GHS_KEEP_REFERENCE(qml_register_types_Qt_labs_settings);
|
||
|
|
||
|
QT_BEGIN_NAMESPACE
|
||
|
|
||
|
diff --git a/src/imports/sharedimage/plugin.cpp b/src/imports/sharedimage/plugin.cpp
|
||
|
index d7c2ef8d17..79168d933b 100644
|
||
|
--- a/src/imports/sharedimage/plugin.cpp
|
||
|
+++ b/src/imports/sharedimage/plugin.cpp
|
||
|
@@ -100,6 +100,7 @@
|
||
|
*/
|
||
|
|
||
|
extern void qml_register_types_Qt_labs_sharedimage();
|
||
|
+GHS_KEEP_REFERENCE(qml_register_types_Qt_labs_sharedimage);
|
||
|
|
||
|
QT_BEGIN_NAMESPACE
|
||
|
|
||
|
diff --git a/src/imports/statemachine/plugin.cpp b/src/imports/statemachine/plugin.cpp
|
||
|
index c370504029..abb238965e 100644
|
||
|
--- a/src/imports/statemachine/plugin.cpp
|
||
|
+++ b/src/imports/statemachine/plugin.cpp
|
||
|
@@ -49,6 +49,7 @@
|
||
|
#include <qqml.h>
|
||
|
|
||
|
extern void qml_register_types_QtQml_StateMachine();
|
||
|
+GHS_KEEP_REFERENCE(qml_register_types_QtQml_StateMachine);
|
||
|
|
||
|
QT_BEGIN_NAMESPACE
|
||
|
|
||
|
diff --git a/src/imports/testlib/main.cpp b/src/imports/testlib/main.cpp
|
||
|
index 83fc150e6c..1da251c49b 100644
|
||
|
--- a/src/imports/testlib/main.cpp
|
||
|
+++ b/src/imports/testlib/main.cpp
|
||
|
@@ -51,6 +51,7 @@ QML_DECLARE_TYPE(QuickTestEvent)
|
||
|
QML_DECLARE_TYPE(QuickTestUtil)
|
||
|
|
||
|
extern void qml_register_types_QtTest();
|
||
|
+GHS_KEEP_REFERENCE(qml_register_types_QtTest);
|
||
|
|
||
|
QT_BEGIN_NAMESPACE
|
||
|
|
||
|
diff --git a/src/imports/wavefrontmesh/plugin.cpp b/src/imports/wavefrontmesh/plugin.cpp
|
||
|
index eea0db19db..edd4d1dba5 100644
|
||
|
--- a/src/imports/wavefrontmesh/plugin.cpp
|
||
|
+++ b/src/imports/wavefrontmesh/plugin.cpp
|
||
|
@@ -43,6 +43,7 @@
|
||
|
#include "qwavefrontmesh.h"
|
||
|
|
||
|
extern void qml_register_types_Qt_labs_wavefrontmesh();
|
||
|
+GHS_KEEP_REFERENCE(qml_register_types_Qt_labs_wavefrontmesh);
|
||
|
|
||
|
QT_BEGIN_NAMESPACE
|
||
|
|
||
|
diff --git a/src/imports/window/plugin.cpp b/src/imports/window/plugin.cpp
|
||
|
index 5152fa02ec..ff2f10fde3 100644
|
||
|
--- a/src/imports/window/plugin.cpp
|
||
|
+++ b/src/imports/window/plugin.cpp
|
||
|
@@ -42,6 +42,7 @@
|
||
|
#include "plugin.h"
|
||
|
|
||
|
extern void qml_register_types_QtQuick_Window();
|
||
|
+GHS_KEEP_REFERENCE(qml_register_types_QtQuick_Window);
|
||
|
|
||
|
QT_BEGIN_NAMESPACE
|
||
|
|
||
|
diff --git a/src/particles/qtquickparticlesglobal_p.h b/src/particles/qtquickparticlesglobal_p.h
|
||
|
index 927bc29050..91c2764060 100644
|
||
|
--- a/src/particles/qtquickparticlesglobal_p.h
|
||
|
+++ b/src/particles/qtquickparticlesglobal_p.h
|
||
|
@@ -66,5 +66,6 @@
|
||
|
#endif
|
||
|
|
||
|
void Q_QUICKPARTICLES_PRIVATE_EXPORT qml_register_types_QtQuick_Particles();
|
||
|
+GHS_KEEP_REFERENCE(qml_register_types_QtQuick_Particles);
|
||
|
|
||
|
#endif // QTQUICKPARTICLESGLOBAL_P_H
|
||
|
diff --git a/src/qml/qml/qqmlextensionplugin.h b/src/qml/qml/qqmlextensionplugin.h
|
||
|
index ef7ff422cd..afb3f99c4a 100644
|
||
|
--- a/src/qml/qml/qqmlextensionplugin.h
|
||
|
+++ b/src/qml/qml/qqmlextensionplugin.h
|
||
|
@@ -44,6 +44,13 @@
|
||
|
#include <QtCore/QUrl>
|
||
|
#include <QtQml/qqmlextensioninterface.h>
|
||
|
|
||
|
+#if defined(Q_CC_GHS)
|
||
|
+# define GHS_PRAGMA(S) _Pragma(#S)
|
||
|
+# define GHS_KEEP_REFERENCE(S) GHS_PRAGMA(ghs reference S ##__Fv)
|
||
|
+#else
|
||
|
+# define GHS_KEEP_REFERENCE(S)
|
||
|
+#endif
|
||
|
+
|
||
|
QT_BEGIN_NAMESPACE
|
||
|
|
||
|
class QQmlEngine;
|
||
|
diff --git a/src/qml/qtqmlglobal_p.h b/src/qml/qtqmlglobal_p.h
|
||
|
index a729729b67..7b0910fa13 100644
|
||
|
--- a/src/qml/qtqmlglobal_p.h
|
||
|
+++ b/src/qml/qtqmlglobal_p.h
|
||
|
@@ -53,6 +53,7 @@
|
||
|
|
||
|
#include <QtCore/private/qglobal_p.h>
|
||
|
#include <QtQml/qtqmlglobal.h>
|
||
|
+#include <QtQml/qqmlextensionplugin.h>
|
||
|
#ifndef QT_QML_BOOTSTRAPPED
|
||
|
# include <QtQml/private/qtqml-config_p.h>
|
||
|
#endif
|
||
|
@@ -61,6 +62,7 @@
|
||
|
#define Q_QML_PRIVATE_EXPORT Q_QML_EXPORT
|
||
|
|
||
|
void Q_QML_PRIVATE_EXPORT qml_register_types_QtQml();
|
||
|
+GHS_KEEP_REFERENCE(qml_register_types_QtQml);
|
||
|
|
||
|
#if !defined(QT_QMLDEVTOOLS_LIB) && !defined(QT_BUILD_QMLDEVTOOLS_LIB)
|
||
|
# define Q_QML_AUTOTEST_EXPORT Q_AUTOTEST_EXPORT
|
||
|
diff --git a/src/qmlmodels/qtqmlmodelsglobal_p.h b/src/qmlmodels/qtqmlmodelsglobal_p.h
|
||
|
index 1a1157138d..24df6ef7b3 100644
|
||
|
--- a/src/qmlmodels/qtqmlmodelsglobal_p.h
|
||
|
+++ b/src/qmlmodels/qtqmlmodelsglobal_p.h
|
||
|
@@ -59,5 +59,6 @@
|
||
|
#define Q_QMLMODELS_AUTOTEST_EXPORT Q_AUTOTEST_EXPORT
|
||
|
|
||
|
void Q_QMLMODELS_PRIVATE_EXPORT qml_register_types_QtQml_Models();
|
||
|
+GHS_KEEP_REFERENCE(qml_register_types_QtQml_Models);
|
||
|
|
||
|
#endif // QTQMLMODELSGLOBAL_P_H
|
||
|
diff --git a/src/qmlworkerscript/qtqmlworkerscriptglobal_p.h b/src/qmlworkerscript/qtqmlworkerscriptglobal_p.h
|
||
|
index c75d5f3129..6452567f6b 100644
|
||
|
--- a/src/qmlworkerscript/qtqmlworkerscriptglobal_p.h
|
||
|
+++ b/src/qmlworkerscript/qtqmlworkerscriptglobal_p.h
|
||
|
@@ -58,5 +58,6 @@
|
||
|
#define Q_QMLWORKERSCRIPT_AUTOTEST_EXPORT Q_AUTOTEST_EXPORT
|
||
|
|
||
|
void Q_QMLWORKERSCRIPT_PRIVATE_EXPORT qml_register_types_QtQml_WorkerScript();
|
||
|
+GHS_KEEP_REFERENCE(qml_register_types_QtQml_WorkerScript);
|
||
|
|
||
|
#endif // QTQMLWORKERSCRIPTGLOBAL_P_H
|
||
|
diff --git a/src/quick/qtquickglobal_p.h b/src/quick/qtquickglobal_p.h
|
||
|
index 80e59563c7..97680569e7 100644
|
||
|
--- a/src/quick/qtquickglobal_p.h
|
||
|
+++ b/src/quick/qtquickglobal_p.h
|
||
|
@@ -62,6 +62,7 @@
|
||
|
#define Q_QUICK_PRIVATE_EXPORT Q_QUICK_EXPORT
|
||
|
|
||
|
void Q_QUICK_PRIVATE_EXPORT qml_register_types_QtQuick();
|
||
|
+GHS_KEEP_REFERENCE(qml_register_types_QtQuick);
|
||
|
|
||
|
QT_BEGIN_NAMESPACE
|
||
|
|
||
|
diff --git a/src/quickshapes/qquickshapesglobal_p.h b/src/quickshapes/qquickshapesglobal_p.h
|
||
|
index 40f6cfbdcf..37386c23b2 100644
|
||
|
--- a/src/quickshapes/qquickshapesglobal_p.h
|
||
|
+++ b/src/quickshapes/qquickshapesglobal_p.h
|
||
|
@@ -51,6 +51,7 @@
|
||
|
// We mean it.
|
||
|
//
|
||
|
|
||
|
+#include <QtQml/qqmlextensionplugin.h>
|
||
|
#include "qquickshapesglobal.h"
|
||
|
|
||
|
QT_BEGIN_NAMESPACE
|
||
|
@@ -60,5 +61,6 @@ QT_BEGIN_NAMESPACE
|
||
|
QT_END_NAMESPACE
|
||
|
|
||
|
void Q_QUICKSHAPES_PRIVATE_EXPORT qml_register_types_QtQuick_Shapes();
|
||
|
+GHS_KEEP_REFERENCE(qml_register_types_QtQuick_Shapes);
|
||
|
|
||
|
#endif // QQUICKSHAPESGLOBAL_P_H
|
||
|
--
|
||
|
2.31.1
|
||
|
|