Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qtsymbolmacros.h
Go to the documentation of this file.
1// Copyright (C) 2023 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5#ifndef QTSYMBOLMACROS_H
6#define QTSYMBOLMACROS_H
7
8#if 0
9# pragma qt_sync_stop_processing
10#endif
11
12// For GHS symbol keeping.
13#include <QtCore/qcompilerdetection.h>
14#include <QtCore/qtpreprocessorsupport.h>
15
16// For handling namespaced resources.
17#ifdef QT_NAMESPACE
18# define QT_RCC_MANGLE_NAMESPACE0(x) x
19# define QT_RCC_MANGLE_NAMESPACE1(a, b) a##_##b
20# define QT_RCC_MANGLE_NAMESPACE2(a, b) QT_RCC_MANGLE_NAMESPACE1(a,b)
21# define QT_RCC_MANGLE_NAMESPACE(name) QT_RCC_MANGLE_NAMESPACE2(
22 QT_RCC_MANGLE_NAMESPACE0(name), QT_RCC_MANGLE_NAMESPACE0(QT_NAMESPACE))
23#else
24# define QT_RCC_MANGLE_NAMESPACE(name) name
25#endif
26
27// GHS needs special handling to keep a symbol around.
28#if defined(Q_CC_GHS)
29# define Q_GHS_KEEP_REFERENCE(S) QT_DO_PRAGMA(ghs reference S ##__Fv)
30#else
31# define Q_GHS_KEEP_REFERENCE(S)
32#endif
33
34// Macros to ensure a symbol is not dropped by the linker even if it's not used.
35#define QT_DECLARE_EXTERN_SYMBOL(NAME, RETURN_TYPE)
36 extern RETURN_TYPE NAME();
38
39#define QT_DECLARE_EXTERN_SYMBOL_INT(NAME)
41
42#define QT_DECLARE_EXTERN_SYMBOL_VOID(NAME)
43 QT_DECLARE_EXTERN_SYMBOL(NAME, void)
44
45#define QT_KEEP_SYMBOL_VAR_NAME(NAME) NAME ## _keep
46
47#define QT_KEEP_SYMBOL_HELPER(NAME, VAR_NAME)
48 volatile auto VAR_NAME = &NAME;
49 Q_UNUSED(VAR_NAME)
50
51#define QT_KEEP_SYMBOL(NAME)
53
54
55// Similar to the ones above, but for rcc resource symbols specifically.
56#define QT_GET_RESOURCE_INIT_SYMBOL(NAME)
57 QT_RCC_MANGLE_NAMESPACE(qInitResources_ ## NAME)
58
59#define QT_DECLARE_EXTERN_RESOURCE(NAME)
61
62#define QT_KEEP_RESOURCE(NAME)
64
65#endif // QTSYMBOLMACROS_H
#define QT_KEEP_SYMBOL(NAME)
#define QT_GET_RESOURCE_INIT_SYMBOL(NAME)
#define QT_RCC_MANGLE_NAMESPACE(name)
#define QT_DECLARE_EXTERN_SYMBOL(NAME, RETURN_TYPE)
#define QT_KEEP_SYMBOL_VAR_NAME(NAME)
#define Q_GHS_KEEP_REFERENCE(S)
#define QT_DECLARE_EXTERN_SYMBOL_INT(NAME)
#define QT_KEEP_SYMBOL_HELPER(NAME, VAR_NAME)