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

Mathieu Desnoyers mathieu.desnoyers at efficios.com
Wed Apr 9 11:36:37 EDT 2014


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

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 ?

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