X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fust-metadata.c;h=c97013f438a88df9b9d7ccf1205761731261860b;hp=fc1ea2e7b6a8f1a97b754c5c38a3972acb4badac;hb=1ddb0e8a8122350b882848286a1ff5169613030b;hpb=da860cab17385f982e501d8a9f8295fe4a24f43d diff --git a/src/bin/lttng-sessiond/ust-metadata.c b/src/bin/lttng-sessiond/ust-metadata.c index fc1ea2e7b..c97013f43 100644 --- a/src/bin/lttng-sessiond/ust-metadata.c +++ b/src/bin/lttng-sessiond/ust-metadata.c @@ -200,6 +200,24 @@ int print_tabs(struct ust_registry_session *session, size_t nesting) return 0; } +static +void sanitize_ctf_identifier(char *out, const char *in) +{ + size_t i; + + for (i = 0; i < LTTNG_UST_SYM_NAME_LEN; i++) { + switch (in[i]) { + case '.': + case '$': + case ':': + out[i] = '_'; + break; + default: + out[i] = in[i]; + } + } +} + /* Called with session registry mutex held. */ static int ust_metadata_enum_statedump(struct ust_registry_session *session, @@ -213,6 +231,7 @@ int ust_metadata_enum_statedump(struct ust_registry_session *session, size_t nr_entries; int ret = 0; size_t i; + char identifier[LTTNG_UST_SYM_NAME_LEN]; rcu_read_lock(); reg_enum = ust_registry_lookup_enum_by_id(session, enum_name, enum_id); @@ -243,13 +262,18 @@ int ust_metadata_enum_statedump(struct ust_registry_session *session, if (ret) { goto end; } + nesting++; /* Dump all entries */ for (i = 0; i < nr_entries; i++) { const struct ustctl_enum_entry *entry = &entries[i]; int j, len; + ret = print_tabs(session, nesting); + if (ret) { + goto end; + } ret = lttng_metadata_printf(session, - " \""); + "\""); if (ret) { goto end; } @@ -281,27 +305,48 @@ int ust_metadata_enum_statedump(struct ust_registry_session *session, if (ret) { goto end; } - if (entry->start == entry->end) { + + if (entry->start.signedness) { ret = lttng_metadata_printf(session, - "%d,\n", - entry->start); + "%lld", (long long) entry->start.value); } else { ret = lttng_metadata_printf(session, - "%d ... %d,\n", - entry->start, entry->end); + "%llu", entry->start.value); } if (ret) { goto end; } + + if (entry->start.signedness == entry->end.signedness && + entry->start.value == entry->end.value) { + ret = lttng_metadata_printf(session, + ",\n"); + } else { + if (entry->end.signedness) { + ret = lttng_metadata_printf(session, + " ... %lld,\n", (long long) entry->end.value); + } else { + ret = lttng_metadata_printf(session, + " ... %llu,\n", entry->end.value); + } + } + if (ret) { + goto end; + } + } + nesting--; + sanitize_ctf_identifier(identifier, field_name); + ret = print_tabs(session, nesting); + if (ret) { + goto end; } - ret = lttng_metadata_printf(session, " } _%s;\n", - field_name); + ret = lttng_metadata_printf(session, "} _%s;\n", + identifier); end: (*iter_field)++; return ret; } - static int _lttng_variant_statedump(struct ust_registry_session *session, const struct ustctl_field *fields, size_t nr_fields, @@ -310,6 +355,7 @@ int _lttng_variant_statedump(struct ust_registry_session *session, const struct ustctl_field *variant = &fields[*iter_field]; uint32_t nr_choices, i; int ret; + char identifier[LTTNG_UST_SYM_NAME_LEN]; if (variant->type.atype != ustctl_atype_variant) { ret = -EINVAL; @@ -317,9 +363,14 @@ int _lttng_variant_statedump(struct ust_registry_session *session, } nr_choices = variant->type.u.variant.nr_choices; (*iter_field)++; + sanitize_ctf_identifier(identifier, variant->type.u.variant.tag_name); + ret = print_tabs(session, nesting); + if (ret) { + goto end; + } ret = lttng_metadata_printf(session, - " variant <_%s> {\n", - variant->type.u.variant.tag_name); + "variant <_%s> {\n", + identifier); if (ret) { goto end; } @@ -332,10 +383,15 @@ int _lttng_variant_statedump(struct ust_registry_session *session, ret = _lttng_field_statedump(session, fields, nr_fields, iter_field, nesting + 1); + if (ret) { + goto end; + } } + sanitize_ctf_identifier(identifier, variant->name); + ret = print_tabs(session, nesting); ret = lttng_metadata_printf(session, - " } _%s;\n", - variant->name); + "} _%s;\n", + identifier); if (ret) { goto end; } @@ -685,6 +741,7 @@ int _lttng_stream_packet_context_declare(struct ust_registry_session *session) " uint64_clock_monotonic_t timestamp_end;\n" " uint64_t content_size;\n" " uint64_t packet_size;\n" + " uint64_t packet_seq_num;\n" " unsigned long events_discarded;\n" " uint32_t cpu_id;\n" "};\n\n" @@ -847,6 +904,7 @@ int ust_metadata_session_statedump(struct ust_registry_session *session, " uint32_t magic;\n" " uint8_t uuid[16];\n" " uint32_t stream_id;\n" + " uint64_t stream_instance_id;\n" " };\n" "};\n\n", session->uint8_t_alignment,