[lttng-dev] [RFC Patch Ust 1/5] Update data structures to support CTF global structures

Mathieu Desnoyers mathieu.desnoyers at efficios.com
Sun Apr 27 07:24:53 EDT 2014


----- Original Message -----
> From: "Geneviève Bastien" <gbastien+lttng at versatic.net>
> To: "Mathieu Desnoyers" <mathieu.desnoyers at efficios.com>
> Cc: lttng-dev at lists.lttng.org
> Sent: Wednesday, April 9, 2014 7:29:14 PM
> Subject: Re: [lttng-dev] [RFC Patch Ust 1/5] Update data structures to support CTF global structures
> 
> 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).

OK, it makes sense.

> >
> > 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.

I just tried moving the "const char *" to "char *", and the compiler
complains. So let's continue using "const char *" in there, and we'll
cast to "char *" whenever we eventually allocate those structures
dynamically and need to free them. Allocating those objects in an object
stack could also do the trick.

Thanks,

Mathieu

> 
> 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
> >>
> 
> 

-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com



More information about the lttng-dev mailing list