[lttng-dev] [RFC Patch Ust 1/5] Update data structures to support CTF global structures
Geneviève Bastien
gbastien+lttng at versatic.net
Wed Apr 9 13:29:14 EDT 2014
On 04/09/2014 11:36 AM, Mathieu Desnoyers wrote:
> ----- Original Message -----
>> From: "Geneviève Bastien" <gbastien+lttng at versatic.net>
>> To: lttng-dev at lists.lttng.org
>> Sent: Wednesday, March 26, 2014 10:47:08 AM
>> Subject: [lttng-dev] [RFC Patch Ust 1/5] Update data structures to support CTF global structures
>>
>> The structures match those in LTTng-tools to support global structures.
>>
>> The struct lttng_structure contains the global types required by the
>> structure, but not ustctl_structure because global types will be flattened
>> in the event description when serializing.
>>
>> Signed-off-by: Geneviève Bastien <gbastien+lttng at versatic.net>
>> ---
>> include/lttng/ust-ctl.h | 14 ++++++++++++++
>> include/lttng/ust-events.h | 17 +++++++++++++++++
>> 2 files changed, 31 insertions(+)
>>
>> diff --git a/include/lttng/ust-ctl.h b/include/lttng/ust-ctl.h
>> index ba3a271..708501d 100644
>> --- a/include/lttng/ust-ctl.h
>> +++ b/include/lttng/ust-ctl.h
>> @@ -265,6 +265,7 @@ enum ustctl_abstract_types {
>> ustctl_atype_sequence,
>> ustctl_atype_string,
>> ustctl_atype_float,
>> + ustctl_atype_structure,
>> NR_USTCTL_ABSTRACT_TYPES,
>> };
>>
>> @@ -335,6 +336,9 @@ struct ustctl_type {
>> struct ustctl_basic_type length_type;
>> struct ustctl_basic_type elem_type;
>> } sequence;
>> + struct {
>> + char name[LTTNG_UST_SYM_NAME_LEN];
>> + } structure;
>> char padding[USTCTL_UST_TYPE_PADDING];
>> } u;
>> } LTTNG_PACKED;
>> @@ -348,9 +352,18 @@ struct ustctl_enum {
>> char padding[USTCTL_UST_ENUM_TYPE_PADDING];
>> } LTTNG_PACKED;
>>
>> +#define USTCTL_UST_STRUCT_TYPE_PADDING 368
> why 368 bytes of padding ? What's so large that we could have to
> add to this structure ?
It's USTCTL_UST_GLOBAL_TYPE_DECL_PADDING (640) minus the size of the
content of this structure. Could be smaller though if it is not always
used inside the ustctl_global_type_decl. But it leaves enough space for
at least another string if need be (but I don't know why we would need
that for structures).
>
> Moreover, my other worry is the "const char *" we're adding for
> enums and structures. I'm concerned that when we eventually choose
> to dynamically allocate those (when we support dynamic probes), we
> will have to do ugly cast to remove the "const".
>
> Thoughts ?
No, I have no idea what to do with that piece of information... Sorry
that's my limited knowledge of C. I've just seen const char * in many
other places of the ust-events.h structures and did the same.
Thanks,
Geneviève
>
> Thanks,
>
> Mathieu
>
>> +struct ustctl_structure {
>> + char name[LTTNG_UST_SYM_NAME_LEN];
>> + size_t nr_fields;
>> + struct ustctl_field *fields;
>> + char padding[USTCTL_UST_STRUCT_TYPE_PADDING];
>> +};
>> +
>> /* CTF categories for global types declared outside event descriptions */
>> enum ustctl_global_type_categories {
>> ustctl_mtype_enum,
>> + ustctl_mtype_structure,
>> NR_USTCTL_GLOBAL_TYPES,
>> };
>>
>> @@ -359,6 +372,7 @@ struct ustctl_global_type_decl {
>> uint32_t mtype;
>> union {
>> struct ustctl_enum ctf_enum;
>> + struct ustctl_structure ctf_structure;
>> char padding[USTCTL_UST_GLOBAL_TYPE_DECL_PADDING];
>> } u;
>> } LTTNG_PACKED;
>> diff --git a/include/lttng/ust-events.h b/include/lttng/ust-events.h
>> index 6f11e84..89155ae 100644
>> --- a/include/lttng/ust-events.h
>> +++ b/include/lttng/ust-events.h
>> @@ -82,6 +82,7 @@ enum lttng_abstract_types {
>> atype_sequence,
>> atype_string,
>> atype_float,
>> + atype_structure,
>> NR_ABSTRACT_TYPES,
>> };
>>
>> @@ -96,6 +97,7 @@ enum lttng_string_encodings {
>> /* CTF categories for global types declared outside event descriptions */
>> enum lttng_global_type_categories {
>> mtype_enum,
>> + mtype_structure,
>> NR_GLOBAL_TYPES,
>> };
>>
>> @@ -207,6 +209,9 @@ struct lttng_type {
>> struct lttng_basic_type length_type;
>> struct lttng_basic_type elem_type;
>> } sequence;
>> + struct {
>> + const char *name;
>> + } structure;
>> char padding[LTTNG_UST_TYPE_PADDING];
>> } u;
>> };
>> @@ -220,12 +225,24 @@ struct lttng_enum {
>> char padding[LTTNG_UST_ENUM_TYPE_PADDING];
>> };
>>
>> +#define LTTNG_UST_STRUCT_TYPE_PADDING 20
>> +struct lttng_structure {
>> + const char *name;
>> + size_t nr_fields;
>> + const struct lttng_event_field *fields;
>> + /* Global types required by this structure. */
>> + unsigned int nr_global_type_decl;
>> + const struct lttng_global_type_decl *global_type_decl;
>> + char padding[LTTNG_UST_STRUCT_TYPE_PADDING];
>> +};
>> +
>> #define LTTNG_UST_GLOBAL_TYPES_PADDING 60
>> struct lttng_global_type_decl {
>> enum lttng_global_type_categories mtype;
>> unsigned int nowrite; /* inherited from the field using it */
>> union {
>> const struct lttng_enum *ctf_enum;
>> + const struct lttng_structure *ctf_structure;
>> char padding[LTTNG_UST_GLOBAL_TYPES_PADDING];
>> } u;
>> };
>> --
>> 1.9.1
>>
>>
>> _______________________________________________
>> lttng-dev mailing list
>> lttng-dev at lists.lttng.org
>> http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
>>
More information about the lttng-dev
mailing list