diff options
author | Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> | 2018-05-09 20:51:12 +0200 |
---|---|---|
committer | Giuseppe D'Angelo <giuseppe.dangelo@kdab.com> | 2018-06-28 16:29:14 +0000 |
commit | 5e39b832e23889af0a5d39586fd3ccf0b1882667 (patch) | |
tree | d724eb126df7a2c974c4d14261f306da70b835d1 /src/tools | |
parent | 40668b82f4609893322691cd3ba3446502cb06d3 (diff) |
Tracegen: add support for pointers and intptr-like types
In general we want to support pointers and pointer-like types
(intptr and its variations); the main use case is tracing an object's
address. Adjust the lttgt generator to use hex formatting
for this kind of aguments; ETW recognizes the pointer argument type
automatically.
Change-Id: I8249a49b6d0b2d468b84c0fbb7624625421cde9a
Reviewed-by: Rafael Roquetto <rafael.roquetto@kdab.com>
Diffstat (limited to 'src/tools')
-rw-r--r-- | src/tools/tracegen/lttng.cpp | 4 | ||||
-rw-r--r-- | src/tools/tracegen/provider.cpp | 14 | ||||
-rw-r--r-- | src/tools/tracegen/provider.h | 2 |
3 files changed, 17 insertions, 3 deletions
diff --git a/src/tools/tracegen/lttng.cpp b/src/tools/tracegen/lttng.cpp index 6c0d8cc88b..5d41bf5f1f 100644 --- a/src/tools/tracegen/lttng.cpp +++ b/src/tools/tracegen/lttng.cpp @@ -69,6 +69,10 @@ static void writeCtfMacro(QTextStream &stream, const Tracepoint::Field &field) case Tracepoint::Field::Integer: stream << "ctf_integer(" << paramType << ", " << name << ", " << name << ")"; return; + case Tracepoint::Field::IntegerHex: + case Tracepoint::Field::Pointer: + stream << "ctf_integer_hex(" << paramType << ", " << name << ", " << name << ")"; + return; case Tracepoint::Field::Float: stream << "ctf_float(" << paramType << ", " << name << ", " << name << ")"; return; diff --git a/src/tools/tracegen/provider.cpp b/src/tools/tracegen/provider.cpp index 00e105377e..9c26dbe72e 100644 --- a/src/tools/tracegen/provider.cpp +++ b/src/tools/tracegen/provider.cpp @@ -157,10 +157,13 @@ static Tracepoint::Field::BackendType backendType(QString rawType) { "signed_long_long_int", Tracepoint::Field::Integer }, { "unsigned_long_long", Tracepoint::Field::Integer }, { "char", Tracepoint::Field::Integer }, + { "intptr_t", Tracepoint::Field::IntegerHex }, + { "uintptr_t", Tracepoint::Field::IntegerHex }, + { "std::intptr_t", Tracepoint::Field::IntegerHex }, + { "std::uintptr_t", Tracepoint::Field::IntegerHex }, { "float", Tracepoint::Field::Float }, { "double", Tracepoint::Field::Float }, { "long_double", Tracepoint::Field::Float }, - { "char_ptr", Tracepoint::Field::String }, { "QString", Tracepoint::Field::QtString }, { "QByteArray", Tracepoint::Field::QtByteArray }, { "QUrl", Tracepoint::Field::QtUrl }, @@ -168,7 +171,6 @@ static Tracepoint::Field::BackendType backendType(QString rawType) }; auto backendType = [](const QString &rawType) { - static const size_t tableSize = sizeof (typeTable) / sizeof (typeTable[0]); for (size_t i = 0; i < tableSize; ++i) { @@ -194,7 +196,13 @@ static Tracepoint::Field::BackendType backendType(QString rawType) rawType = rawType.trimmed(); rawType.replace(QStringLiteral(" "), QStringLiteral("_")); - return backendType(rawType.trimmed()); + if (rawType == QLatin1String("char_ptr")) + return Tracepoint::Field::String; + + if (rawType.endsWith(QLatin1String("_ptr"))) + return Tracepoint::Field::Pointer; + + return backendType(rawType); } static Tracepoint parseTracepoint(const QString &name, const QStringList &args, diff --git a/src/tools/tracegen/provider.h b/src/tools/tracegen/provider.h index d8cbd2662d..9771e62f4d 100644 --- a/src/tools/tracegen/provider.h +++ b/src/tools/tracegen/provider.h @@ -59,8 +59,10 @@ struct Tracepoint Array, Sequence, Integer, + IntegerHex, Float, String, + Pointer, QtString, QtByteArray, QtUrl, |