void print_fields(struct bt_ctf_event *event, const char *procname, int pid) { unsigned int cnt, i; const struct bt_definition *const * list; const struct bt_declaration *l; const struct bt_definition *scope; enum ctf_type_id type; const char *str; struct processtop *current_proc; struct files *current_file; int fd, fd_value = -1; scope = bt_ctf_get_top_level_scope(event, BT_EVENT_FIELDS); bt_ctf_get_field_list(event, scope, &list, &cnt); for (i = 0; i < cnt; i++) { if (i != 0) fprintf(output, ", "); fprintf(output, "%s = ", bt_ctf_field_name(list[i])); l = bt_ctf_get_decl_from_def(list[i]); if (strncmp(bt_ctf_field_name(list[i]), "fd", 2) == 0) fd = 1; else fd = 0; type = bt_ctf_field_type(l); if (type == CTF_TYPE_INTEGER) { if (bt_ctf_get_int_signedness(l) == 0) { fd_value = bt_ctf_get_uint64(list[i]); fprintf(output, "%" PRIu64, bt_ctf_get_uint64(list[i])); } else { fd_value = bt_ctf_get_int64(list[i]); fprintf(output, "%" PRId64, bt_ctf_get_int64(list[i])); } } else if (type == CTF_TYPE_STRING) { fprintf(output, "%s", bt_ctf_get_string(list[i])); } else if (type == CTF_TYPE_ARRAY) { str = bt_ctf_get_char_array(list[i]); if (!bt_ctf_field_get_error() && str) fprintf(output, "%s", str); } if (fd) { current_proc = find_process_tid(<tngtop, pid, procname); if (!current_proc) continue; current_file = get_file(current_proc, fd_value); if (!current_file || !current_file->name) continue; fprintf(output, "<%s>", current_file->name); } } }
int getFields(struct bt_ctf_event *ctf_event, struct bt_definition const *fields, GString* fieldsStr) { enum ctf_type_id fieldType = bt_ctf_field_type(bt_ctf_get_decl_from_def(fields)); int ret = 0, isSigned = -1, len = 0, i = 0; const struct bt_definition *index_def; switch (fieldType) { case CTF_TYPE_INTEGER: isSigned = bt_ctf_get_int_signedness(bt_ctf_get_decl_from_def(fields)); if (isSigned == 1) { g_string_append_printf(fieldsStr, "%lu", bt_ctf_get_int64(fields)); } else if (isSigned == 0) { g_string_append_printf(fieldsStr, "%" PRIu64 , bt_ctf_get_uint64(fields)); } break; case CTF_TYPE_STRING: g_string_append_printf(fieldsStr, "%s", bt_ctf_get_string(fields)); break; case CTF_TYPE_ARRAY: g_string_append_printf(fieldsStr, "[ "); len = bt_ctf_get_array_len(bt_ctf_get_decl_from_def(fields)); if ((index_def = bt_ctf_get_index(ctf_event, fields, i))) { for (i = 0; i < len; i++) { if (i > 0) { g_string_append_printf(fieldsStr, ", "); } //bt_ctf_field_type( bt_ctf_get_index(ctf_event, fields, i)); g_string_append_printf(fieldsStr, " "); g_string_append_printf(fieldsStr, "[%d] = ",i); getFields(ctf_event, bt_ctf_get_index(ctf_event, fields, i), fieldsStr); } } else { g_string_append_printf(fieldsStr, "%s", bt_ctf_get_char_array(fields)); } g_string_append_printf(fieldsStr, " ]"); break; case CTF_TYPE_UNKNOWN: g_string_append_printf(fieldsStr, "TYPE UNKNOWN"); default: g_string_append_printf(fieldsStr, "TYPE UNIMP %i",fieldType ); break; } return ret; }
static void ctf_read_tsv (struct uploaded_tsv **uploaded_tsvs) { gdb_assert (ctf_iter != NULL); while (1) { struct bt_ctf_event *event; const struct bt_definition *scope; const struct bt_definition *def; uint32_t event_id; struct uploaded_tsv *utsv = NULL; event = bt_ctf_iter_read_event (ctf_iter); scope = bt_ctf_get_top_level_scope (event, BT_STREAM_EVENT_HEADER); event_id = bt_ctf_get_uint64 (bt_ctf_get_field (event, scope, "id")); if (event_id != CTF_EVENT_ID_TSV_DEF) break; scope = bt_ctf_get_top_level_scope (event, BT_EVENT_FIELDS); def = bt_ctf_get_field (event, scope, "number"); utsv = get_uploaded_tsv ((int32_t) bt_ctf_get_int64 (def), uploaded_tsvs); def = bt_ctf_get_field (event, scope, "builtin"); utsv->builtin = (int32_t) bt_ctf_get_int64 (def); def = bt_ctf_get_field (event, scope, "initial_value"); utsv->initial_value = bt_ctf_get_int64 (def); def = bt_ctf_get_field (event, scope, "name"); utsv->name = xstrdup (bt_ctf_get_string (def)); if (bt_iter_next (bt_ctf_get_iter (ctf_iter)) < 0) break; } }