summaryrefslogtreecommitdiffstats
path: root/src/tools/tracegen
diff options
context:
space:
mode:
Diffstat (limited to 'src/tools/tracegen')
-rw-r--r--src/tools/tracegen/CMakeLists.txt8
-rw-r--r--src/tools/tracegen/ctf.cpp261
-rw-r--r--src/tools/tracegen/ctf.h2
-rw-r--r--src/tools/tracegen/etw.cpp35
-rw-r--r--src/tools/tracegen/etw.h2
-rw-r--r--src/tools/tracegen/helpers.cpp23
-rw-r--r--src/tools/tracegen/helpers.h18
-rw-r--r--src/tools/tracegen/lttng.cpp70
-rw-r--r--src/tools/tracegen/lttng.h2
-rw-r--r--src/tools/tracegen/panic.cpp2
-rw-r--r--src/tools/tracegen/panic.h2
-rw-r--r--src/tools/tracegen/provider.cpp53
-rw-r--r--src/tools/tracegen/provider.h13
-rw-r--r--src/tools/tracegen/qtheaders.cpp2
-rw-r--r--src/tools/tracegen/qtheaders.h2
-rw-r--r--src/tools/tracegen/tracegen.cpp2
16 files changed, 329 insertions, 168 deletions
diff --git a/src/tools/tracegen/CMakeLists.txt b/src/tools/tracegen/CMakeLists.txt
index 5acf781bf9..f5f6b2e184 100644
--- a/src/tools/tracegen/CMakeLists.txt
+++ b/src/tools/tracegen/CMakeLists.txt
@@ -1,8 +1,6 @@
# Copyright (C) 2022 The Qt Company Ltd.
# SPDX-License-Identifier: BSD-3-Clause
-# Generated from tracegen.pro.
-
#####################################################################
## tracegen Tool:
#####################################################################
@@ -11,7 +9,7 @@ qt_get_tool_target_name(target_name tracegen)
qt_internal_add_tool(${target_name}
CORE_LIBRARY Bootstrap
INSTALL_DIR "${INSTALL_LIBEXECDIR}"
- TOOLS_TARGET Core # special case
+ TOOLS_TARGET Core
SOURCES
etw.cpp etw.h
helpers.cpp helpers.h
@@ -21,8 +19,6 @@ qt_internal_add_tool(${target_name}
provider.cpp provider.h
qtheaders.cpp qtheaders.h
tracegen.cpp
+ NO_UNITY_BUILD
)
qt_internal_return_unless_building_tools()
-
-#### Keys ignored in scope 1:.:.:tracegen.pro:<TRUE>:
-# _OPTION = "host_build"
diff --git a/src/tools/tracegen/ctf.cpp b/src/tools/tracegen/ctf.cpp
index 22bff89d47..95ffcf89cc 100644
--- a/src/tools/tracegen/ctf.cpp
+++ b/src/tools/tracegen/ctf.cpp
@@ -1,5 +1,5 @@
// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "ctf.h"
#include "provider.h"
@@ -15,6 +15,7 @@
static void writePrologue(QTextStream &stream, const QString &fileName, const Provider &provider)
{
+ writeCommonPrologue(stream);
const QString guard = includeGuard(fileName);
// include prefix text or qt headers only once
@@ -88,17 +89,94 @@ static void writeWrapper(QTextStream &stream,
<< "#endif // " << includeGuard << "\n\n";
}
+
+static void writeMetadataGenerators(QTextStream &stream)
+{
+ stream << R"CPP(
+template <typename T>
+inline QString integerToMetadata(const QString &name)
+{
+ QString ret;
+ if (!std::is_signed<T>().value)
+ ret += QLatin1Char('u');
+ if (sizeof(T) == 8)
+ ret += QStringLiteral("int64_t ");
+ else if (sizeof(T) == 4)
+ ret += QStringLiteral("int32_t ");
+ else if (sizeof(T) == 2)
+ ret += QStringLiteral("int16_t ");
+ else if (sizeof(T) == 1)
+ ret += QStringLiteral("int8_t ");
+ ret += name + QLatin1Char(';');
+ return ret;
+}
+
+template <typename T>
+inline QString integerArrayToMetadata(const QString &size, const QString &name)
+{
+ QString ret;
+ if (!std::is_signed<T>().value)
+ ret += QLatin1Char('u');
+ if (sizeof(T) == 8)
+ ret += QStringLiteral("int64_t ");
+ else if (sizeof(T) == 4)
+ ret += QStringLiteral("int32_t ");
+ else if (sizeof(T) == 2)
+ ret += QStringLiteral("int16_t ");
+ else if (sizeof(T) == 1)
+ ret += QStringLiteral("int8_t ");
+ ret += name + QLatin1Char('[') + size + QStringLiteral("];");
+ return ret;
+}
+
+template <typename T>
+inline QString floatToMetadata(const QString &name)
+{
+ QString ret;
+ if (sizeof(T) == 8)
+ ret += QStringLiteral("double ");
+ else if (sizeof(T) == 4)
+ ret += QStringLiteral("float ");
+ ret += name + QLatin1Char(';');
+ return ret;
+}
+
+template <typename T>
+inline QString floatArrayToMetadata(const QString &size, const QString &name)
+{
+ QString ret;
+ if (sizeof(T) == 8)
+ ret += QStringLiteral("double ");
+ else if (sizeof(T) == 4)
+ ret += QStringLiteral("float ");
+ ret += name + QLatin1Char('[') + size + QLatin1Char(']');
+ return ret + QLatin1Char(';');
+}
+
+inline QString pointerToMetadata(const QString &name)
+{
+ QString ret;
+ if (QT_POINTER_SIZE == 8)
+ ret += QStringLiteral("intptr64_t ");
+ else if (QT_POINTER_SIZE == 4)
+ ret += QStringLiteral("intptr32_t ");
+ ret += name + QLatin1Char(';');
+ return ret;
+}
+
+)CPP";
+}
+
static void writeTracepoint(QTextStream &stream,
const Tracepoint &tracepoint, const QString &providerName)
{
stream << "TRACEPOINT_EVENT(\n"
<< " " << providerName << ",\n"
<< " " << tracepoint.name << ",\n";
- stream << "\"";
const auto checkUnknownArgs = [](const Tracepoint &tracepoint) {
for (auto &field : tracepoint.fields) {
- if (field.backendType.backendType == Tracepoint::Field::Unknown)
+ if (field.backendType == Tracepoint::Field::Unknown)
return true;
}
return false;
@@ -110,114 +188,117 @@ static void writeTracepoint(QTextStream &stream,
ret = type.left(type.length() - 1).simplified();
if (ret.startsWith(QStringLiteral("const")))
ret = ret.right(ret.length() - 6).simplified();
- return typeToName(ret);
+ return typeToTypeName(ret);
};
- int eventSize = 0;
+ QString eventSize;
bool variableSize = false;
- if (!checkUnknownArgs(tracepoint)) {
+ const bool emptyMetadata = checkUnknownArgs(tracepoint) || tracepoint.args.size() == 0;
+ if (!emptyMetadata) {
for (int i = 0; i < tracepoint.args.size(); i++) {
auto &arg = tracepoint.args[i];
auto &field = tracepoint.fields[i];
if (i > 0) {
- stream << " \\n\\\n";
- stream << " ";
+ stream << " + QStringLiteral(\"\\n\\\n \") + ";
+ eventSize += QStringLiteral(" + ");
}
const bool array = field.arrayLen > 0;
- switch (field.backendType.backendType) {
+ switch (field.backendType) {
case Tracepoint::Field::Boolean: {
- stream << "Boolean " << arg.name << ";";
- eventSize += 8;
+ stream << "QStringLiteral(\"Boolean " << arg.name << ";\")";
+ eventSize += QStringLiteral("sizeof(bool)");
} break;
case Tracepoint::Field::Integer: {
- if (!field.backendType.isSigned)
- stream << "u";
- stream << "int" << field.backendType.bits << "_t ";
+ if (array) {
+ stream << "integerArrayToMetadata<" << formatType(arg.type)
+ << ">(QStringLiteral(\"" << field.arrayLen << "\"), QStringLiteral(\""
+ << arg.name << "\"))";
+ } else {
+ stream << "integerToMetadata<" << formatType(arg.type) << ">(QStringLiteral(\""
+ << arg.name << "\"))";
+ }
+ eventSize += QStringLiteral("sizeof(") + formatType(arg.type) + QStringLiteral(")");
if (array)
- stream << arg.name << "[" << field.arrayLen << "];";
- else
- stream << arg.name << ";";
- eventSize += field.backendType.bits * qMax(1, field.arrayLen);
- } break;
- case Tracepoint::Field::Pointer: {
- if (QT_POINTER_SIZE == 8)
- stream << "intptr64_t " << formatType(arg.type) << "_" << arg.name << ";";
- else
- stream << "intptr32_t " << formatType(arg.type) << "_" << arg.name << ";";
- eventSize += QT_POINTER_SIZE * 8;
+ eventSize += QStringLiteral(" * ") + QString::number(field.arrayLen);
} break;
+ case Tracepoint::Field::Pointer:
case Tracepoint::Field::IntegerHex: {
- if (field.backendType.bits == 64)
- stream << "intptr64_t " << formatType(arg.name) << ";";
- else
- stream << "intptr32_t " << formatType(arg.name) << ";";
- eventSize += field.backendType.bits;
+ stream << "pointerToMetadata(QStringLiteral(\"" << formatType(arg.type) << "_"
+ << arg.name << "\"))";
+ eventSize += QStringLiteral("QT_POINTER_SIZE");
} break;
case Tracepoint::Field::Float: {
- if (field.backendType.bits == 32)
- stream << "float " << arg.name;
- else
- stream << "double " << arg.name;
if (array) {
- stream << "[" << field.arrayLen << "];";
+ stream << "floatArrayToMetadata<" << formatType(arg.type)
+ << ">(QStringLiteral(\"" << field.arrayLen << "\"), QStringLiteral(\""
+ << arg.name << "\"))";
} else {
- stream << ";";
+ stream << "floatToMetadata<" << formatType(arg.type) << ">(QStringLiteral(\""
+ << arg.name << "\"))";
}
- eventSize += field.backendType.bits * qMax(1, field.arrayLen);
+ eventSize += QStringLiteral("sizeof(") + formatType(arg.type) + QStringLiteral(")");
+ if (array)
+ eventSize += QStringLiteral(" * ") + QString::number(field.arrayLen);
} break;
+ case Tracepoint::Field::QtUrl:
+ case Tracepoint::Field::QtString:
case Tracepoint::Field::String: {
- stream << "string " << arg.name << ";";
- eventSize += 8;
- variableSize = true;
- } break;
- case Tracepoint::Field::QtString: {
- stream << "string " << arg.name << ";";
- eventSize += 8;
- variableSize = true;
- } break;
- case Tracepoint::Field::QtByteArray:
- break;
- case Tracepoint::Field::QtUrl: {
- stream << "string " << arg.name << ";";
- eventSize += 8;
+ stream << "QStringLiteral(\"string " << arg.name << ";\")";
+ eventSize += QStringLiteral("1");
variableSize = true;
} break;
case Tracepoint::Field::QtRect: {
- stream << "int32_t QRect_" << arg.name << "_x;\\n\\\n ";
- stream << "int32_t QRect_" << arg.name << "_y;\\n\\\n ";
- stream << "int32_t QRect_" << arg.name << "_width;\\n\\\n ";
- stream << "int32_t QRect_" << arg.name << "_height;";
- eventSize += 32 * 4;
+ stream << "QStringLiteral(\"int32_t QRect_" << arg.name << "_x;\\n\\\n \")";
+ stream << " + QStringLiteral(\"int32_t QRect_" << arg.name << "_y;\\n\\\n \")";
+ stream << " + QStringLiteral(\"int32_t QRect_" << arg.name << "_width;\\n\\\n \")";
+ stream << " + QStringLiteral(\"int32_t QRect_" << arg.name << "_height;\\n\\\n \")";
+ eventSize += QStringLiteral("16");
} break;
case Tracepoint::Field::QtSize: {
- stream << "int32_t QSize_" << arg.name << "_width;\\n\\\n ";
- stream << "int32_t QSize_" << arg.name << "_height;";
- eventSize += 32 * 2;
+ stream << "QStringLiteral(\"int32_t QSize_" << arg.name << "_width;\\n\\\n \")";
+ stream << " + QStringLiteral(\"int32_t QSize_" << arg.name << "_height;\\n\\\n \")";
+ eventSize += QStringLiteral("8");
+ } break;
+ case Tracepoint::Field::QtRectF: {
+ stream << "QStringLiteral(\"float QRectF_" << arg.name << "_x;\\n\\\n \")";
+ stream << " + QStringLiteral(\"float QRectF_" << arg.name << "_y;\\n\\\n \")";
+ stream << " + QStringLiteral(\"float QRectF_" << arg.name << "_width;\\n\\\n \")";
+ stream << " + QStringLiteral(\"float QRectF_" << arg.name << "_height;\\n\\\n \")";
+ eventSize += QStringLiteral("16");
+ } break;
+ case Tracepoint::Field::QtSizeF: {
+ stream << "QStringLiteral(\"float QSizeF_" << arg.name << "_width;\\n\\\n \")";
+ stream << " + QStringLiteral(\"float QSizeF_" << arg.name << "_height;\\n\\\n \")";
+ eventSize += QStringLiteral("8");
} break;
case Tracepoint::Field::Unknown:
break;
case Tracepoint::Field::EnumeratedType: {
- QString type = arg.type;
- type.replace(QStringLiteral("::"), QStringLiteral("_"));
- stream << type << " " << arg.name << ";";
- eventSize += field.backendType.bits;
+ stream << "QStringLiteral(\"" << typeToTypeName(arg.type) << " " << arg.name << ";\")";
+ eventSize += QString::number(field.enumValueSize / 8);
variableSize = true;
} break;
case Tracepoint::Field::FlagType: {
- QString type = arg.type;
- type.replace(QStringLiteral("::"), QStringLiteral("_"));
- stream << "uint8_t " << arg.name << "_length;\\n\\\n ";
- stream << type << " " << arg.name << "[" << arg.name << "_length];";
- eventSize += 16;
+ stream << "QStringLiteral(\"uint8_t " << arg.name << "_length;\\n\\\n ";
+ stream << typeToTypeName(arg.type) << " " << arg.name << "[" << arg.name << "_length];\")";
+ eventSize += QStringLiteral("2");
+ variableSize = true;
} break;
+ case Tracepoint::Field::QtByteArray:
case Tracepoint::Field::Sequence:
- panic("Unhandled sequence '%s %s", qPrintable(arg.type), qPrintable(arg.name));
+ panic("Unhandled type '%s %s", qPrintable(arg.type), qPrintable(arg.name));
break;
}
}
}
- stream << "\",\n";
- stream << eventSize / 8 << ", \n";
+ if (emptyMetadata)
+ stream << "{},\n";
+ else
+ stream << ",\n";
+ if (eventSize.length())
+ stream << eventSize << ", \n";
+ else
+ stream << "0, \n";
stream << (variableSize ? "true" : "false") << "\n";
stream << ")\n\n";
}
@@ -236,14 +317,23 @@ static void writeEnums(QTextStream &stream, const Provider &provider)
QString name = e.name;
name.replace(QStringLiteral("::"), QStringLiteral("_"));
stream << "TRACEPOINT_METADATA(" << provider.name << ", " << name << ", \n";
- stream << "\"typealias enum : integer { size = " << e.valueSize << "; } {\\n\\\n";
- for (const auto &v : e.values) {
- if (v.range)
+ stream << "QStringLiteral(\"typealias enum : integer { size = " << e.valueSize << "; } {\\n\\\n";
+
+ const auto values = e.values;
+ QList<int> handledValues;
+
+ for (const auto &v : values) {
+ if (handledValues.contains(v.value))
+ continue;
+ if (v.range) {
stream << v.name << " = " << v.value << " ... " << v.range << ", \\n\\\n";
- else
- stream << v.name << " = " << v.value << ", \\n\\\n";
+ } else {
+ const QString names = aggregateListValues(v.value, values);
+ stream << names << " = " << v.value << ", \\n\\\n";
+ handledValues.append(v.value);
+ }
}
- stream << "} := " << name << ";\\n\\n\");\n\n";
+ stream << "} := " << name << ";\\n\\n\"));\n\n";
}
stream << "\n";
}
@@ -254,11 +344,19 @@ static void writeFlags(QTextStream &stream, const Provider &provider)
QString name = e.name;
name.replace(QStringLiteral("::"), QStringLiteral("_"));
stream << "TRACEPOINT_METADATA(" << provider.name << ", " << name << ", \n";
- stream << "\"typealias enum : integer { size = 8; } {\\n\\\n";
- for (const auto &v : e.values) {
- stream << v.name << " = " << v.value << ", \\n\\\n";
+ stream << "QStringLiteral(\"typealias enum : integer { size = 8; } {\\n\\\n";
+
+ const auto values = e.values;
+ QList<int> handledValues;
+
+ for (const auto &v : values) {
+ if (handledValues.contains(v.value))
+ continue;
+ const QString names = aggregateListValues(v.value, values);
+ stream << names << " = " << v.value << ", \\n\\\n";
+ handledValues.append(v.value);
}
- stream << "} := " << name << ";\\n\\n\");\n\n";
+ stream << "} := " << name << ";\\n\\n\"));\n\n";
}
stream << "\n";
}
@@ -270,6 +368,7 @@ void writeCtf(QFile &file, const Provider &provider)
const QString fileName = QFileInfo(file.fileName()).fileName();
writePrologue(stream, fileName, provider);
+ writeMetadataGenerators(stream);
writeEnums(stream, provider);
writeFlags(stream, provider);
writeTracepoints(stream, provider);
diff --git a/src/tools/tracegen/ctf.h b/src/tools/tracegen/ctf.h
index 54f5e398c2..113e30919f 100644
--- a/src/tools/tracegen/ctf.h
+++ b/src/tools/tracegen/ctf.h
@@ -1,5 +1,5 @@
// Copyright (C) 2022 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef CTF_H
#define CTF_H
diff --git a/src/tools/tracegen/etw.cpp b/src/tools/tracegen/etw.cpp
index 415a0a8dcb..f54a7896ea 100644
--- a/src/tools/tracegen/etw.cpp
+++ b/src/tools/tracegen/etw.cpp
@@ -1,5 +1,5 @@
// Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Rafael Roquetto <rafael.roquetto@kdab.com>
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "etw.h"
#include "provider.h"
@@ -31,7 +31,7 @@ static void writeEtwMacro(QTextStream &stream, const Tracepoint::Field &field)
return;
}
- switch (field.backendType.backendType) {
+ switch (field.backendType) {
case Tracepoint::Field::QtString:
stream << "TraceLoggingCountedWideString(reinterpret_cast<LPCWSTR>("
<< name << ".utf16()), static_cast<ULONG>(" << name << ".size()), \""
@@ -45,12 +45,14 @@ static void writeEtwMacro(QTextStream &stream, const Tracepoint::Field &field)
stream << "TraceLoggingValue(" << name << ".toEncoded().constData(), \"" << name << "\")";
return;
case Tracepoint::Field::QtRect:
+ case Tracepoint::Field::QtRectF:
stream << "TraceLoggingValue(" << name << ".x(), \"x\"), "
<< "TraceLoggingValue(" << name << ".y(), \"y\"), "
<< "TraceLoggingValue(" << name << ".width(), \"width\"), "
<< "TraceLoggingValue(" << name << ".height(), \"height\")";
return;
case Tracepoint::Field::QtSize:
+ case Tracepoint::Field::QtSizeF:
stream << "TraceLoggingValue(" << name << ".width(), \"width\"), "
<< "TraceLoggingValue(" << name << ".height(), \"height\")";
return;
@@ -66,7 +68,7 @@ static void writeEtwMacro(QTextStream &stream, const Tracepoint::Field &field)
return;
case Tracepoint::Field::EnumeratedType:
case Tracepoint::Field::FlagType:
- stream << "TraceLoggingString(trace_convert_" << typeToName(field.paramType) << "(" << name << ").toUtf8().constData(), \"" << name << "\")";
+ stream << "TraceLoggingString(trace_convert_" << typeToTypeName(field.paramType) << "(" << name << ").toUtf8().constData(), \"" << name << "\")";
return;
default:
break;
@@ -102,6 +104,7 @@ static QString createGuid(const QUuid &uuid)
static void writePrologue(QTextStream &stream, const QString &fileName, const Provider &provider)
{
+ writeCommonPrologue(stream);
QUuid uuid = QUuid::createUuidV5(QUuid(), provider.name.toLocal8Bit());
const QString providerV = providerVar(provider.name);
@@ -177,7 +180,7 @@ static void writeWrapper(QTextStream &stream, const Provider &provider, const Tr
// Convert all unknown types to QString's using QDebug.
// Note the naming convention: it's field.name##Str
for (const Tracepoint::Field &field : tracepoint.fields) {
- if (field.backendType.backendType == Tracepoint::Field::Unknown) {
+ if (field.backendType == Tracepoint::Field::Unknown) {
stream << " const QString " << field.name << "Str = QDebug::toString(" << field.name
<< ");\n";
}
@@ -206,7 +209,7 @@ static void writeWrapper(QTextStream &stream, const Provider &provider, const Tr
static void writeEnumConverter(QTextStream &stream, const TraceEnum &enumeration)
{
- stream << "inline QString trace_convert_" << typeToName(enumeration.name) << "(" << enumeration.name << " val)\n";
+ stream << "inline QString trace_convert_" << typeToTypeName(enumeration.name) << "(" << enumeration.name << " val)\n";
stream << "{\n";
for (const auto &v : enumeration.values) {
if (v.range != 0) {
@@ -215,9 +218,14 @@ static void writeEnumConverter(QTextStream &stream, const TraceEnum &enumeration
}
}
stream << "\n QString ret;\n switch (val) {\n";
+
+ QList<int> handledValues;
for (const auto &v : enumeration.values) {
- if (v.range == 0)
- stream << " case " << v.value << ": ret = QStringLiteral(\"" << v.name << "\"); break;\n";
+ if (v.range == 0 && !handledValues.contains(v.value)) {
+ stream << " case " << v.value << ": ret = QStringLiteral(\""
+ << aggregateListValues(v.value, enumeration.values) << "\"); break;\n";
+ handledValues.append(v.value);
+ }
}
stream << " }\n return ret;\n}\n";
@@ -225,17 +233,22 @@ static void writeEnumConverter(QTextStream &stream, const TraceEnum &enumeration
static void writeFlagConverter(QTextStream &stream, const TraceFlags &flag)
{
- stream << "inline QString trace_convert_" << typeToName(flag.name) << "(" << flag.name << " val)\n";
+ stream << "inline QString trace_convert_" << typeToTypeName(flag.name) << "(" << flag.name << " val)\n";
stream << "{\n QString ret;\n";
for (const auto &v : flag.values) {
if (v.value == 0) {
- stream << " if (val == 0)\n return QStringLiteral(\"" << v.name << "\");\n";
+ stream << " if (val == 0)\n return QStringLiteral(\""
+ << aggregateListValues(v.value, flag.values) << "\");\n";
break;
}
}
+ QList<int> handledValues;
for (const auto &v : flag.values) {
- if (v.value != 0)
- stream << " if (val & " << (1 << (v.value - 1)) << ") { if (ret.length()) ret += QLatin1Char(\'|\'); ret += QStringLiteral(\"" << v.name << "\"); }\n";
+ if (v.value != 0 && !handledValues.contains(v.value)) {
+ stream << " if (val & " << (1 << (v.value - 1))
+ << ") { if (ret.length()) ret += QLatin1Char(\'|\'); ret += QStringLiteral(\"" << v.name << "\"); }\n";
+ handledValues.append(v.value);
+ }
}
stream << " return ret;\n}\n";
}
diff --git a/src/tools/tracegen/etw.h b/src/tools/tracegen/etw.h
index ad68fe08de..88508e2034 100644
--- a/src/tools/tracegen/etw.h
+++ b/src/tools/tracegen/etw.h
@@ -1,5 +1,5 @@
// Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Rafael Roquetto <rafael.roquetto@kdab.com>
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef ETW_H
#define ETW_H
diff --git a/src/tools/tracegen/helpers.cpp b/src/tools/tracegen/helpers.cpp
index ea43d71154..0ea5848493 100644
--- a/src/tools/tracegen/helpers.cpp
+++ b/src/tools/tracegen/helpers.cpp
@@ -1,12 +1,21 @@
// Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Rafael Roquetto <rafael.roquetto@kdab.com>
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "helpers.h"
#include <qdebug.h>
using namespace Qt::StringLiterals;
-QString typeToName(const QString &name)
+void writeCommonPrologue(QTextStream &stream)
+{
+ stream << R"CPP(
+#ifndef Q_TRACEPOINT
+#error "Q_TRACEPOINT not set for the module, Q_TRACE not enabled."
+#endif
+)CPP";
+}
+
+QString typeToTypeName(const QString &name)
{
QString ret = name;
return ret.replace(QStringLiteral("::"), QStringLiteral("_"));
@@ -57,8 +66,8 @@ QString formatParameterList(const Provider &provider, const QList<Tracepoint::Ar
for (int i = 0; i < args.size(); i++) {
const Tracepoint::Argument &arg = args[i];
const Tracepoint::Field &field = fields[i];
- if (field.backendType.backendType == Tracepoint::Field::FlagType)
- ret += ", trace_convert_"_L1 + typeToName(arg.type) + "("_L1 + arg.name + ")"_L1;
+ if (field.backendType == Tracepoint::Field::FlagType)
+ ret += ", trace_convert_"_L1 + typeToTypeName(arg.type) + "("_L1 + arg.name + ")"_L1;
else
ret += ", "_L1 + arg.name;
}
@@ -81,7 +90,7 @@ QString formatParameterList(const Provider &provider, const QList<Tracepoint::Ar
const Tracepoint::Field &field = fields[i];
if (arg.arrayLen > 1) {
ret += ", trace::toByteArrayFromArray("_L1 + arg.name + ", "_L1 + QString::number(arg.arrayLen) + ") "_L1;
- } else if (field.backendType.backendType == Tracepoint::Field::EnumeratedType) {
+ } else if (field.backendType == Tracepoint::Field::EnumeratedType) {
const TraceEnum &e = findEnumeration(provider.enumerations, arg.type);
QString integerType;
if (e.valueSize == 8)
@@ -91,9 +100,9 @@ QString formatParameterList(const Provider &provider, const QList<Tracepoint::Ar
else
integerType = QStringLiteral("quint32");
ret += ", trace::toByteArrayFromEnum<"_L1 + integerType + ">("_L1 + arg.name + ")"_L1;
- } else if (field.backendType.backendType == Tracepoint::Field::FlagType) {
+ } else if (field.backendType == Tracepoint::Field::FlagType) {
ret += ", trace::toByteArrayFromFlags("_L1 + arg.name + ")"_L1;
- } else if (field.backendType.backendType == Tracepoint::Field::String) {
+ } else if (field.backendType == Tracepoint::Field::String) {
ret += ", trace::toByteArrayFromCString("_L1 + arg.name + ")"_L1;
} else {
ret += ", "_L1 + arg.name;
diff --git a/src/tools/tracegen/helpers.h b/src/tools/tracegen/helpers.h
index 1dcfc26519..ea6db016a6 100644
--- a/src/tools/tracegen/helpers.h
+++ b/src/tools/tracegen/helpers.h
@@ -1,5 +1,5 @@
// Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Rafael Roquetto <rafael.roquetto@kdab.com>
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef HELPERS_H
#define HELPERS_H
@@ -8,6 +8,7 @@
#include <qlist.h>
#include <qstring.h>
+#include <qtextstream.h>
enum ParamType {
LTTNG,
@@ -15,9 +16,22 @@ enum ParamType {
CTF
};
-QString typeToName(const QString &name);
+QString typeToTypeName(const QString &type);
QString includeGuard(const QString &filename);
QString formatFunctionSignature(const QList<Tracepoint::Argument> &args);
QString formatParameterList(const Provider &provider, const QList<Tracepoint::Argument> &args, const QList<Tracepoint::Field> &fields, ParamType type);
+void writeCommonPrologue(QTextStream &stream);
+
+template <typename T>
+static QString aggregateListValues(int value, const QList<T> &list)
+{
+ QStringList values;
+ for (const T &l : list) {
+ if (l.value == value)
+ values << l.name;
+ }
+ return values.join(QLatin1Char('_'));
+}
+
#endif // HELPERS_H
diff --git a/src/tools/tracegen/lttng.cpp b/src/tools/tracegen/lttng.cpp
index effe927e4f..9711570874 100644
--- a/src/tools/tracegen/lttng.cpp
+++ b/src/tools/tracegen/lttng.cpp
@@ -1,5 +1,5 @@
// Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Rafael Roquetto <rafael.roquetto@kdab.com>
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "lttng.h"
#include "provider.h"
@@ -20,12 +20,23 @@ static void writeCtfMacro(QTextStream &stream, const Provider &provider, const T
const int arrayLen = field.arrayLen;
if (arrayLen > 0) {
- stream << "ctf_array(" <<paramType << ", "
- << name << ", " << name << ", " << arrayLen << ")";
+ if (paramType == QStringLiteral("double") || paramType == QStringLiteral("float")) {
+ const char *newline = nullptr;
+ for (int i = 0; i < arrayLen; i++) {
+ stream << newline;
+ stream << "ctf_float(" <<paramType << ", " << name << "_" << QString::number(i) << ", "
+ << name << "[" << QString::number(i) << "]" << ")";
+ newline = "\n ";
+ }
+
+ } else {
+ stream << "ctf_array(" <<paramType << ", "
+ << name << ", " << name << ", " << arrayLen << ")";
+ }
return;
}
- switch (field.backendType.backendType) {
+ switch (field.backendType) {
case Tracepoint::Field::Sequence:
stream << "ctf_sequence(" << paramType
<< ", " << name << ", " << name
@@ -56,17 +67,27 @@ static void writeCtfMacro(QTextStream &stream, const Provider &provider, const T
stream << "ctf_string(" << name << ", " << name << ".toString().toUtf8().constData())";
return;
case Tracepoint::Field::QtRect:
- stream << "ctf_integer(int, x, " << name << ".x()) "
- << "ctf_integer(int, y, " << name << ".y()) "
- << "ctf_integer(int, width, " << name << ".width()) "
- << "ctf_integer(int, height, " << name << ".height()) ";
+ stream << "ctf_integer(int, QRect_" << name << "_x, " << name << ".x()) "
+ << "ctf_integer(int, QRect_" << name << "_y, " << name << ".y()) "
+ << "ctf_integer(int, QRect_" << name << "_width, " << name << ".width()) "
+ << "ctf_integer(int, QRect_" << name << "_height, " << name << ".height()) ";
+ return;
+ case Tracepoint::Field::QtSizeF:
+ stream << "ctf_float(double, QSizeF_" << name << "_width, " << name << ".width()) "
+ << "ctf_float(double, QSizeF_" << name << "_height, " << name << ".height()) ";
+ return;
+ case Tracepoint::Field::QtRectF:
+ stream << "ctf_float(double, QRectF_" << name << "_x, " << name << ".x()) "
+ << "ctf_float(double, QRectF_" << name << "_y, " << name << ".y()) "
+ << "ctf_float(double, QRectF_" << name << "_width, " << name << ".width()) "
+ << "ctf_float(double, QRectF_" << name << "_height, " << name << ".height()) ";
return;
case Tracepoint::Field::QtSize:
- stream << "ctf_integer(int, width, " << name << ".width()) "
- << "ctf_integer(int, height, " << name << ".height()) ";
+ stream << "ctf_integer(int, QSize_" << name << "_width, " << name << ".width()) "
+ << "ctf_integer(int, QSize_" << name << "_height, " << name << ".height()) ";
return;
case Tracepoint::Field::EnumeratedType:
- stream << "ctf_enum(" << provider.name << ", " << typeToName(paramType) << ", int, " << name << ", " << name << ") ";
+ stream << "ctf_enum(" << provider.name << ", " << typeToTypeName(paramType) << ", int, " << name << ", " << name << ") ";
return;
case Tracepoint::Field::FlagType:
stream << "ctf_sequence(const char , " << name << ", "
@@ -80,6 +101,7 @@ static void writeCtfMacro(QTextStream &stream, const Provider &provider, const T
static void writePrologue(QTextStream &stream, const QString &fileName, const Provider &provider)
{
+ writeCommonPrologue(stream);
const QString guard = includeGuard(fileName);
stream << "#undef TRACEPOINT_PROVIDER\n";
@@ -170,7 +192,7 @@ static void writeTracepoint(QTextStream &stream, const Provider &provider,
for (int i = 0; i < tracepoint.args.size(); i++) {
const auto &arg = tracepoint.args[i];
const auto &field = tracepoint.fields[i];
- if (field.backendType.backendType == Tracepoint::Field::FlagType)
+ if (field.backendType == Tracepoint::Field::FlagType)
stream << comma << "QByteArray, " << arg.name;
else
stream << comma << arg.type << ", " << arg.name;
@@ -196,13 +218,16 @@ static void writeEnums(QTextStream &stream, const Provider &provider)
for (const auto &e : provider.enumerations) {
stream << "TRACEPOINT_ENUM(\n"
<< " " << provider.name << ",\n"
- << " " << typeToName(e.name) << ",\n"
+ << " " << typeToTypeName(e.name) << ",\n"
<< " TP_ENUM_VALUES(\n";
+ QList<int> handledValues;
for (const auto &v : e.values) {
- if (v.range > 0)
+ if (v.range > 0) {
stream << " ctf_enum_range(\"" << v.name << "\", " << v.value << ", " << v.range << ")\n";
- else
- stream << " ctf_enum_value(\"" << v.name << "\", " << v.value << ")\n";
+ } else if (!handledValues.contains(v.value)) {
+ stream << " ctf_enum_value(\"" << aggregateListValues(v.value, e.values) << "\", " << v.value << ")\n";
+ handledValues.append(v.value);
+ }
}
stream << " )\n)\n\n";
}
@@ -213,10 +238,15 @@ static void writeFlags(QTextStream &stream, const Provider &provider)
for (const auto &f : provider.flags) {
stream << "TRACEPOINT_ENUM(\n"
<< " " << provider.name << ",\n"
- << " " << typeToName(f.name) << ",\n"
+ << " " << typeToTypeName(f.name) << ",\n"
<< " TP_ENUM_VALUES(\n";
- for (const auto &v : f.values)
- stream << " ctf_enum_value(\"" << v.name << "\", " << v.value << ")\n";
+ QList<int> handledValues;
+ for (const auto &v : f.values) {
+ if (!handledValues.contains(v.value)) {
+ stream << " ctf_enum_value(\"" << aggregateListValues(v.value, f.values) << "\", " << v.value << ")\n";
+ handledValues.append(v.value);
+ }
+ }
stream << " )\n)\n\n";
}
@@ -228,7 +258,7 @@ static void writeFlags(QTextStream &stream, const Provider &provider)
stream << "QT_BEGIN_NAMESPACE\n";
stream << "namespace QtPrivate {\n";
for (const auto &f : provider.flags) {
- stream << "inline QByteArray trace_convert_" << typeToName(f.name) << "(" << f.name << " val)\n";
+ stream << "inline QByteArray trace_convert_" << typeToTypeName(f.name) << "(" << f.name << " val)\n";
stream << "{\n";
stream << " QByteArray ret;\n";
stream << " if (val == 0) { ret.append((char)0); return ret; }\n";
diff --git a/src/tools/tracegen/lttng.h b/src/tools/tracegen/lttng.h
index d8fbd1291e..c36c70a1d4 100644
--- a/src/tools/tracegen/lttng.h
+++ b/src/tools/tracegen/lttng.h
@@ -1,5 +1,5 @@
// Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Rafael Roquetto <rafael.roquetto@kdab.com>
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef LTTNG_H
#define LTTNG_H
diff --git a/src/tools/tracegen/panic.cpp b/src/tools/tracegen/panic.cpp
index 5258b5ba9d..fa4e6b3ee3 100644
--- a/src/tools/tracegen/panic.cpp
+++ b/src/tools/tracegen/panic.cpp
@@ -1,5 +1,5 @@
// Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Rafael Roquetto <rafael.roquetto@kdab.com>
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "panic.h"
diff --git a/src/tools/tracegen/panic.h b/src/tools/tracegen/panic.h
index 51cd96fba6..ee635a8aeb 100644
--- a/src/tools/tracegen/panic.h
+++ b/src/tools/tracegen/panic.h
@@ -1,5 +1,5 @@
// Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Rafael Roquetto <rafael.roquetto@kdab.com>
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef PANIC_H
#define PANIC_H
diff --git a/src/tools/tracegen/provider.cpp b/src/tools/tracegen/provider.cpp
index 741da3b099..bdd669c9cd 100644
--- a/src/tools/tracegen/provider.cpp
+++ b/src/tools/tracegen/provider.cpp
@@ -1,5 +1,5 @@
// Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Rafael Roquetto <rafael.roquetto@kdab.com>
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "provider.h"
#include "panic.h"
@@ -97,17 +97,14 @@ static QString removeBraces(QString type)
}
#define TYPEDATA_ENTRY(type, backendType) \
-{ QT_STRINGIFY(type), backendType, sizeof(type) * 8, std::is_signed<type>::value }
+{ QT_STRINGIFY(type), backendType }
-static Tracepoint::Field::BackendType backendType(QString rawType)
+static Tracepoint::Field::Type backendType(QString rawType)
{
static const struct TypeData {
const char *type;
Tracepoint::Field::Type backendType;
- int bits;
- bool isSigned;
} typeTable[] = {
-#ifdef UNDERSCORE_TYPES_DEFINED
TYPEDATA_ENTRY(short_int, Tracepoint::Field::Integer),
TYPEDATA_ENTRY(signed_short, Tracepoint::Field::Integer),
TYPEDATA_ENTRY(signed_short_int, Tracepoint::Field::Integer),
@@ -125,7 +122,6 @@ static Tracepoint::Field::BackendType backendType(QString rawType)
TYPEDATA_ENTRY(signed_long_long, Tracepoint::Field::Integer),
TYPEDATA_ENTRY(signed_long_long_int, Tracepoint::Field::Integer),
TYPEDATA_ENTRY(unsigned_long_long, Tracepoint::Field::Integer),
-#endif
TYPEDATA_ENTRY(bool, Tracepoint::Field::Boolean),
TYPEDATA_ENTRY(int, Tracepoint::Field::Integer),
TYPEDATA_ENTRY(signed, Tracepoint::Field::Integer),
@@ -140,11 +136,13 @@ static Tracepoint::Field::BackendType backendType(QString rawType)
TYPEDATA_ENTRY(float, Tracepoint::Field::Float),
TYPEDATA_ENTRY(double, Tracepoint::Field::Float),
TYPEDATA_ENTRY(long double, Tracepoint::Field::Float),
- { "QString", Tracepoint::Field::QtString , 0, false},
- { "QByteArray", Tracepoint::Field::QtByteArray , 0, false},
- { "QUrl", Tracepoint::Field::QtUrl , 0, false},
- { "QRect", Tracepoint::Field::QtRect , 0, false},
- { "QSize", Tracepoint::Field::QtSize , 0, false}
+ TYPEDATA_ENTRY(QString, Tracepoint::Field::QtString),
+ TYPEDATA_ENTRY(QByteArray, Tracepoint::Field::QtByteArray),
+ TYPEDATA_ENTRY(QUrl, Tracepoint::Field::QtUrl),
+ TYPEDATA_ENTRY(QRect, Tracepoint::Field::QtRect),
+ TYPEDATA_ENTRY(QSize, Tracepoint::Field::QtSize),
+ TYPEDATA_ENTRY(QRectF, Tracepoint::Field::QtRectF),
+ TYPEDATA_ENTRY(QSizeF, Tracepoint::Field::QtSizeF)
};
auto backendType = [](const QString &rawType) {
@@ -155,7 +153,7 @@ static Tracepoint::Field::BackendType backendType(QString rawType)
return typeTable[i];
}
- TypeData unknown = { nullptr, Tracepoint::Field::Unknown, 0, false };
+ TypeData unknown = { nullptr, Tracepoint::Field::Unknown };
return unknown;
};
@@ -164,7 +162,7 @@ static Tracepoint::Field::BackendType backendType(QString rawType)
rawType = removeBraces(rawType);
if (!sequenceLength(rawType).isNull())
- return { Tracepoint::Field::Sequence, 0, false };
+ return Tracepoint::Field::Sequence;
static const QRegularExpression constMatch(QStringLiteral("\\bconst\\b"));
rawType.remove(constMatch);
@@ -176,13 +174,13 @@ static Tracepoint::Field::BackendType backendType(QString rawType)
rawType.replace(QStringLiteral(" "), QStringLiteral("_"));
if (rawType == "char_ptr"_L1)
- return { Tracepoint::Field::String, 0, false };
+ return Tracepoint::Field::String;
if (rawType.endsWith("_ptr"_L1))
- return {Tracepoint::Field::Pointer, QT_POINTER_SIZE, false };
+ return Tracepoint::Field::Pointer;
TypeData d = backendType(rawType);
- return { d.backendType, d.bits, d.isSigned };
+ return d.backendType;
}
static Tracepoint parseTracepoint(const Provider &provider, const QString &name, const QStringList &args,
@@ -246,9 +244,10 @@ static Tracepoint parseTracepoint(const Provider &provider, const QString &name,
const TraceEnum &e = findEnumeration(provider.enumerations, type);
const TraceFlags &f = findFlags(provider.flags, type);
if (!e.name.isEmpty()) {
- field.backendType = { Tracepoint::Field::EnumeratedType, e.valueSize, false };
+ field.backendType = Tracepoint::Field::EnumeratedType;
+ field.enumValueSize = e.valueSize;
} else if (!f.name.isEmpty()) {
- field.backendType = { Tracepoint::Field::FlagType, 0, false };
+ field.backendType = Tracepoint::Field::FlagType;
} else {
field.backendType = backendType(type);
}
@@ -301,7 +300,7 @@ Provider parseProvider(const QString &filename)
static const QRegularExpression tracedef(QStringLiteral("^([A-Za-z][A-Za-z0-9_]*)\\((.*)\\)$"));
static const QRegularExpression enumenddef(QStringLiteral("^} ?([A-Za-z][A-Za-z0-9_:]*);"));
- static const QRegularExpression enumdef(QStringLiteral("^([A-Za-z][A-Za-z0-9_]*)( ?= ?([0-9]*))?"));
+ static const QRegularExpression enumdef(QStringLiteral("^([A-Za-z][A-Za-z0-9_]*)( *= *([xabcdef0-9]*))?"));
static const QRegularExpression rangedef(QStringLiteral("^RANGE\\(([A-Za-z][A-Za-z0-9_]*) ?, ?([0-9]*) ?... ?([0-9]*) ?\\)"));
Provider provider;
@@ -373,7 +372,7 @@ Provider parseProvider(const QString &filename)
value.name = m.captured(1);
value.value = m.captured(2).toInt();
value.range = m.captured(3).toInt();
- currentEnumValue = value.range;
+ currentEnumValue = value.range + 1;
currentEnum.values.push_back(value);
maxEnumValue = qMax(maxEnumValue, value.range);
minEnumValue = qMin(minEnumValue, value.value);
@@ -385,22 +384,26 @@ Provider parseProvider(const QString &filename)
value.name = m.captured(1);
value.value = m.captured(3).toInt();
value.range = 0;
- currentEnumValue = value.value;
+ currentEnumValue = value.value + 1;
currentEnum.values.push_back(value);
maxEnumValue = qMax(maxEnumValue, value.value);
minEnumValue = qMin(minEnumValue, value.value);
} else {
TraceFlags::FlagValue value;
value.name = m.captured(1);
- value.value = m.captured(3).toInt();
+ if (m.captured(3).startsWith(QStringLiteral("0x")))
+ value.value = m.captured(3).toInt(nullptr, 16);
+ else
+ value.value = m.captured(3).toInt();
if (!isPow2OrZero(value.value)) {
printf("Warning: '%s' line %d:\n"
" '%s' flag value is not power of two.\n",
qPrintable(filename), lineNumber,
qPrintable(line));
+ } else {
+ value.value = pow2Log2(value.value);
+ currentFlags.values.push_back(value);
}
- value.value = pow2Log2(value.value);
- currentFlags.values.push_back(value);
}
} else {
maxEnumValue = qMax(maxEnumValue, currentEnumValue);
diff --git a/src/tools/tracegen/provider.h b/src/tools/tracegen/provider.h
index 7209659033..e5e99b868e 100644
--- a/src/tools/tracegen/provider.h
+++ b/src/tools/tracegen/provider.h
@@ -1,5 +1,5 @@
// Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Rafael Roquetto <rafael.roquetto@kdab.com>
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef PROVIDER_H
#define PROVIDER_H
@@ -33,19 +33,17 @@ struct Tracepoint
QtUrl,
QtRect,
QtSize,
+ QtRectF,
+ QtSizeF,
EnumeratedType,
FlagType,
Unknown
};
- struct BackendType {
- Type backendType;
- int bits;
- bool isSigned;
- };
- BackendType backendType;
+ Type backendType;
QString paramType;
QString name;
int arrayLen;
+ int enumValueSize;
QString seqLen;
};
@@ -77,7 +75,6 @@ struct TraceFlags {
Q_DECLARE_TYPEINFO(TraceEnum, Q_RELOCATABLE_TYPE);
Q_DECLARE_TYPEINFO(TraceFlags, Q_RELOCATABLE_TYPE);
Q_DECLARE_TYPEINFO(Tracepoint::Argument, Q_RELOCATABLE_TYPE);
-Q_DECLARE_TYPEINFO(Tracepoint::Field::BackendType, Q_RELOCATABLE_TYPE);
Q_DECLARE_TYPEINFO(Tracepoint::Field, Q_RELOCATABLE_TYPE);
Q_DECLARE_TYPEINFO(Tracepoint, Q_RELOCATABLE_TYPE);
diff --git a/src/tools/tracegen/qtheaders.cpp b/src/tools/tracegen/qtheaders.cpp
index a65ece5c5b..237c22b237 100644
--- a/src/tools/tracegen/qtheaders.cpp
+++ b/src/tools/tracegen/qtheaders.cpp
@@ -1,5 +1,5 @@
// Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Rafael Roquetto <rafael.roquetto@kdab.com>
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "qtheaders.h"
diff --git a/src/tools/tracegen/qtheaders.h b/src/tools/tracegen/qtheaders.h
index 6be4d15f4a..86405c9479 100644
--- a/src/tools/tracegen/qtheaders.h
+++ b/src/tools/tracegen/qtheaders.h
@@ -1,5 +1,5 @@
// Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Rafael Roquetto <rafael.roquetto@kdab.com>
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef QTHEADERS_H
#define QTHEADERS_H
diff --git a/src/tools/tracegen/tracegen.cpp b/src/tools/tracegen/tracegen.cpp
index 46b354c520..776d81675d 100644
--- a/src/tools/tracegen/tracegen.cpp
+++ b/src/tools/tracegen/tracegen.cpp
@@ -1,5 +1,5 @@
// Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Rafael Roquetto <rafael.roquetto@kdab.com>
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include "provider.h"
#include "ctf.h"