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>bb10
parent
40668b82f4
commit
5e39b832e2
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -59,8 +59,10 @@ struct Tracepoint
|
|||
Array,
|
||||
Sequence,
|
||||
Integer,
|
||||
IntegerHex,
|
||||
Float,
|
||||
String,
|
||||
Pointer,
|
||||
QtString,
|
||||
QtByteArray,
|
||||
QtUrl,
|
||||
|
|
|
|||
Loading…
Reference in New Issue