[lttng-dev] [Patch LTTng-ust 2/7] Add empty macros to support CTF named enumerations

Mathieu Desnoyers mathieu.desnoyers at efficios.com
Thu Jan 30 18:09:19 EST 2014


----- Original Message -----
> From: "Geneviève Bastien" <gbastien+lttng at versatic.net>
> To: lttng-dev at lists.lttng.org
> Sent: Friday, January 24, 2014 3:04:40 PM
> Subject: [lttng-dev] [Patch LTTng-ust 2/7] Add empty macros to support CTF	named enumerations
> 
> The macros are initialized so that CTF enumerations can be used in
> tracepoints.
> They do not do anything yet.
> 
> Signed-off-by: Geneviève Bastien <gbastien+lttng at versatic.net>
> ---
>  include/lttng/tracepoint.h                   | 41
>  ++++++++++++++++++++++++++++
>  include/lttng/ust-tracepoint-event-nowrite.h |  4 +++
>  include/lttng/ust-tracepoint-event-reset.h   | 12 ++++++++
>  include/lttng/ust-tracepoint-event-write.h   |  4 +++
>  4 files changed, 61 insertions(+)
> 
> diff --git a/include/lttng/tracepoint.h b/include/lttng/tracepoint.h
> index 66e2abd..be650b7 100644
> --- a/include/lttng/tracepoint.h
> +++ b/include/lttng/tracepoint.h
> @@ -421,6 +421,47 @@ __tracepoints__ptrs_destroy(void)
>  
>  /* The following declarations must be outside re-inclusion protection. */
>  
> +#ifndef TRACEPOINT_ENUM
> +
> +/*
> + * Tracepoint Enumerations
> + *
> + * The enumeration is a mapping between an integer and a string.

... between integer, or integer range, and a string.

> It can be
> used
> + * to have a more compact trace in cases where the possible values for a
> field
> + * are limited:
> + *
> + * An example:
> + *
> + * TRACEPOINT_ENUM(someproject_component, enumname, int
> + *	TP_ENUM_VALUES(
> + *		ctf_enum_value("even", 0)
> + *		ctf_enum_value("uneven", 1)
> + *		ctf_enum_range("twoto4", 2, 4)
> + *		ctf_enum_value("five", 5)
> + *	)
> + * )

I think those ranges can overlap, right ? This should be documented. Please
double-check in the CTF spec.

Thanks,

Mathieu

> + *
> + * Where "someproject_component" is the name of the component this
> enumeration
> + * belongs to and "enumname" identifies this enumeration. The "int" is the
> data
> + * type of the container and can be anything that can be translated to a ctf
> + * integer (int, short, char, etc). Inside the TP_ENUM_VALUES macro is the
> + * actual mapping. Each string value can map to either a single value with
> + * ctf_enum_value or a range of values with ctf_enum_range.
> + *
> + * That enumeration can then be used in a field inside the TP_FIELD macro
> using
> + * the following line:
> + *
> + * ctf_enum(someproject_component, enumname, enumfield, enumval)
> + *
> + * Where "someproject_component" and "enumname" match those in the
> + * TRACEPOINT_ENUM, "enumfield" is the name of the field and "enumval" is
> the
> + * value.
> + */
> +
> +#define TRACEPOINT_ENUM(provider, name, type, values)
> +
> +#endif /* #ifndef TRACEPOINT_ENUM */
> +
>  #ifndef TRACEPOINT_EVENT
>  
>  /*
> diff --git a/include/lttng/ust-tracepoint-event-nowrite.h
> b/include/lttng/ust-tracepoint-event-nowrite.h
> index 98d9791..7f5b1d9 100644
> --- a/include/lttng/ust-tracepoint-event-nowrite.h
> +++ b/include/lttng/ust-tracepoint-event-nowrite.h
> @@ -49,3 +49,7 @@
>  #undef ctf_string_nowrite
>  #define ctf_string_nowrite(_item, _src)				\
>  	_ctf_string(_item, _src, 1)
> +
> +#undef ctf_enum_nowrite
> +#define ctf_enum_nowrite(_provider, _name, _item, _src)		\
> +	_ctf_enum(_provider, _name, _item, _src, 1)
> diff --git a/include/lttng/ust-tracepoint-event-reset.h
> b/include/lttng/ust-tracepoint-event-reset.h
> index 412883d..58e3428 100644
> --- a/include/lttng/ust-tracepoint-event-reset.h
> +++ b/include/lttng/ust-tracepoint-event-reset.h
> @@ -28,6 +28,9 @@
>  #undef TRACEPOINT_EVENT_INSTANCE
>  #define TRACEPOINT_EVENT_INSTANCE(_provider, _template, _name, _args)
>  
> +#undef TRACEPOINT_ENUM
> +#define TRACEPOINT_ENUM(_provider, _name, _type, _values)
> +
>  #undef TP_ARGS
>  #define TP_ARGS(...)
>  
> @@ -61,6 +64,9 @@
>  #undef _ctf_string
>  #define _ctf_string(_item, _src, _nowrite)
>  
> +#undef _ctf_enum
> +#define _ctf_enum(_provider, _name, _item, _src, _nowrite)
> +
>  /* "write" */
>  #undef ctf_integer
>  #define ctf_integer(_type, _item, _src)
> @@ -92,6 +98,9 @@
>  #undef ctf_string
>  #define ctf_string(_item, _src)
>  
> +#undef ctf_enum
> +#define ctf_enum(_provider, _name, _item, _src)
> +
>  /* "nowrite" */
>  #undef ctf_integer_nowrite
>  #define ctf_integer_nowrite(_type, _item, _src)
> @@ -113,3 +122,6 @@
>  
>  #undef ctf_string_nowrite
>  #define ctf_string_nowrite(_item, _src)
> +
> +#undef ctf_enum_nowrite
> +#define ctf_enum_nowrite(_provider, _name, _item, _src)
> diff --git a/include/lttng/ust-tracepoint-event-write.h
> b/include/lttng/ust-tracepoint-event-write.h
> index 44218d2..7dd06ed 100644
> --- a/include/lttng/ust-tracepoint-event-write.h
> +++ b/include/lttng/ust-tracepoint-event-write.h
> @@ -61,3 +61,7 @@
>  #undef ctf_string
>  #define ctf_string(_item, _src)					\
>  	_ctf_string(_item, _src, 0)
> +
> +#undef ctf_enum
> +#define ctf_enum(_provider, _name, _item, _src)			\
> +	_ctf_enum(_provider, _name, _item, _src, 0)
> --
> 1.8.5.3
> 
> 
> _______________________________________________
> 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