[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