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,
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);
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;
}
goto end;
}
}
- ret = lttng_metadata_printf(session,
- "\" = ");
+ ret = lttng_metadata_printf(session, "\"");
if (ret) {
goto end;
}
- if (entry->start == entry->end) {
- ret = lttng_metadata_printf(session,
- "%d,\n",
- entry->start);
+
+ if (entry->u.extra.options &
+ USTCTL_UST_ENUM_ENTRY_OPTION_IS_AUTO) {
+ ret = lttng_metadata_printf(session, ",\n");
+ if (ret) {
+ goto end;
+ }
} else {
ret = lttng_metadata_printf(session,
- "%d ... %d,\n",
- entry->start, entry->end);
- }
- if (ret) {
- goto end;
+ " = ");
+ if (ret) {
+ goto end;
+ }
+
+ if (entry->start.signedness) {
+ ret = lttng_metadata_printf(session,
+ "%lld", (long long) entry->start.value);
+ } else {
+ ret = lttng_metadata_printf(session,
+ "%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;
+ }
}
}
- ret = lttng_metadata_printf(session, " } _%s;\n",
- field_name);
+ nesting--;
+ sanitize_ctf_identifier(identifier, field_name);
+ ret = print_tabs(session, nesting);
+ if (ret) {
+ goto end;
+ }
+ 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,
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;
}
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;
}
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;
}
" 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"
" 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,