X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=src%2Fctf-writer%2Fresolve.c;h=c6316c0bfee0e40ebb1473e5065aa7dfc9bb2be3;hp=184814358356e708e5ef0adfcb27f8c3c591e92d;hb=0235b0db7de5bcacdb3650c92461f2ce5eb2143d;hpb=350ad6c1c5f45a4e90c33e3c1354125c209bbf02 diff --git a/src/ctf-writer/resolve.c b/src/ctf-writer/resolve.c index 18481435..c6316c0b 100644 --- a/src/ctf-writer/resolve.c +++ b/src/ctf-writer/resolve.c @@ -1,31 +1,10 @@ /* - * resolve.c - * - * Babeltrace - CTF writer: Type resolving internal + * SPDX-License-Identifier: MIT * * Copyright 2015 Jérémie Galarneau * Copyright 2016 Philippe Proulx * - * Authors: Jérémie Galarneau - * Philippe Proulx - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. + * Babeltrace - CTF writer: Type resolving internal */ #define BT_LOG_TAG "CTF-WRITER/RESOLVE" @@ -36,9 +15,9 @@ #include #include -#include -#include -#include +#include +#include +#include #include #include "common/macros.h" @@ -166,7 +145,7 @@ int type_stack_push(type_stack *stack, struct bt_ctf_field_type_common *type) goto end; } - BT_LOGV("Pushing field type on context's stack: " + BT_LOGT("Pushing field type on context's stack: " "ft-addr=%p, stack-size-before=%u", type, stack->len); frame->type = bt_ctf_object_get_ref(type); g_ptr_array_add(stack, frame); @@ -179,7 +158,7 @@ end: * Checks whether or not `stack` is empty. */ static -bt_bool type_stack_empty(type_stack *stack) +bt_ctf_bool type_stack_empty(type_stack *stack) { return stack->len == 0; } @@ -201,15 +180,10 @@ size_t type_stack_size(type_stack *stack) static struct type_stack_frame *type_stack_peek(type_stack *stack) { - struct type_stack_frame *entry = NULL; + BT_ASSERT(stack); + BT_ASSERT(!type_stack_empty(stack)); - if (!stack || type_stack_empty(stack)) { - goto end; - } - - entry = g_ptr_array_index(stack, stack->len - 1); -end: - return entry; + return g_ptr_array_index(stack, stack->len - 1); } /* @@ -218,19 +192,12 @@ end: * Return value is owned by `stack`. */ static -struct type_stack_frame *type_stack_at(type_stack *stack, - size_t index) +struct type_stack_frame *type_stack_at(type_stack *stack, size_t index) { - struct type_stack_frame *entry = NULL; + BT_ASSERT(stack); + BT_ASSERT(index < stack->len); - if (!stack || index >= stack->len) { - goto end; - } - - entry = g_ptr_array_index(stack, index); - -end: - return entry; + return g_ptr_array_index(stack, index); } /* @@ -244,7 +211,7 @@ void type_stack_pop(type_stack *stack) * This will call the frame's destructor and free it, as * well as put its contained field type. */ - BT_LOGV("Popping context's stack: stack-size-before=%u", + BT_LOGT("Popping context's stack: stack-size-before=%u", stack->len); g_ptr_array_set_size(stack, stack->len - 1); } @@ -259,7 +226,7 @@ static struct bt_ctf_field_type_common *get_type_from_ctx(struct resolve_context *ctx, enum bt_ctf_scope scope) { - BT_ASSERT(scope >= BT_CTF_SCOPE_TRACE_PACKET_HEADER && + BT_ASSERT_DBG(scope >= BT_CTF_SCOPE_TRACE_PACKET_HEADER && scope <= BT_CTF_SCOPE_EVENT_FIELDS); return ctx->scopes[scope - BT_CTF_SCOPE_TRACE_PACKET_HEADER]; @@ -288,7 +255,7 @@ enum bt_ctf_scope get_root_scope_from_absolute_pathstr(const char *pathstr) if (strncmp(pathstr, absolute_path_prefixes[scope], strlen(absolute_path_prefixes[scope]))) { /* Prefix does not match: try the next one */ - BT_LOGV("Prefix does not match: trying the next one: " + BT_LOGT("Prefix does not match: trying the next one: " "path=\"%s\", path-prefix=\"%s\", scope=%s", pathstr, absolute_path_prefixes[scope], bt_ctf_scope_string(scope)); @@ -297,7 +264,7 @@ enum bt_ctf_scope get_root_scope_from_absolute_pathstr(const char *pathstr) /* Found it! */ ret = scope; - BT_LOGV("Found root scope from absolute path: " + BT_LOGT("Found root scope from absolute path: " "path=\"%s\", scope=%s", pathstr, bt_ctf_scope_string(scope)); goto end; @@ -402,7 +369,7 @@ int ptokens_to_field_path(GList *ptokens, struct bt_ctf_field_path *field_path, { int ret = 0; GList *cur_ptoken = ptokens; - bt_bool first_level_done = BT_FALSE; + bt_ctf_bool first_level_done = BT_CTF_FALSE; /* Get our own reference */ bt_ctf_object_get_ref(type); @@ -415,7 +382,7 @@ int ptokens_to_field_path(GList *ptokens, struct bt_ctf_field_path *field_path, enum bt_ctf_field_type_id type_id = bt_ctf_field_type_common_get_type_id(type); - BT_LOGV("Current path token: token=\"%s\"", field_name); + BT_LOGT("Current path token: token=\"%s\"", field_name); /* Find to which index corresponds the current path token */ if (type_id == BT_CTF_FIELD_TYPE_ID_ARRAY || @@ -445,7 +412,7 @@ int ptokens_to_field_path(GList *ptokens, struct bt_ctf_field_path *field_path, /* Next path token */ cur_ptoken = g_list_next(cur_ptoken); - first_level_done = BT_TRUE; + first_level_done = BT_CTF_TRUE; } /* Create new field path entry */ @@ -541,7 +508,7 @@ int relative_ptokens_to_field_path(GList *ptokens, int cur_index = type_stack_at(ctx->type_stack, parent_pos_in_stack)->index; - BT_LOGV("Locating target field type from current parent field type: " + BT_LOGT("Locating target field type from current parent field type: " "parent-pos=%d, parent-ft-addr=%p, cur-index=%d", parent_pos_in_stack, parent_type, cur_index); @@ -550,7 +517,7 @@ int relative_ptokens_to_field_path(GList *ptokens, parent_type, cur_index); if (ret) { /* Not found... yet */ - BT_LOGV_STR("Not found at this point."); + BT_LOGT_STR("Not found at this point."); bt_ctf_field_path_clear(tail_field_path); } else { /* Found: stitch tail field path to head field path */ @@ -558,7 +525,7 @@ int relative_ptokens_to_field_path(GList *ptokens, int tail_field_path_len = tail_field_path->indexes->len; - while (BT_TRUE) { + while (BT_CTF_TRUE) { struct bt_ctf_field_type_common *cur_type = type_stack_at(ctx->type_stack, i)->type; int index = type_stack_at( @@ -595,7 +562,7 @@ int relative_ptokens_to_field_path(GList *ptokens, struct bt_ctf_field_type_common *root_type; bt_ctf_field_path_clear(field_path); - BT_LOGV("Looking into potential root scope: scope=%s", + BT_LOGT("Looking into potential root scope: scope=%s", bt_ctf_scope_string(field_path->root)); root_type = get_type_from_ctx(ctx, field_path->root); if (!root_type) { @@ -608,13 +575,13 @@ int relative_ptokens_to_field_path(GList *ptokens, root_type, INT_MAX); if (ret) { /* Not found yet */ - BT_LOGV_STR("Not found in this scope."); + BT_LOGT_STR("Not found in this scope."); field_path->root--; continue; } /* Found */ - BT_LOGV_STR("Found in this scope."); + BT_LOGT_STR("Found in this scope."); break; } } @@ -662,7 +629,7 @@ struct bt_ctf_field_path *pathstr_to_field_path(const char *pathstr, if (root_scope == BT_CTF_SCOPE_UNKNOWN) { /* Relative path: start with current root scope */ field_path->root = ctx->root_scope; - BT_LOGV("Detected relative path: starting with current root scope: " + BT_LOGT("Detected relative path: starting with current root scope: " "scope=%s", bt_ctf_scope_string(field_path->root)); ret = relative_ptokens_to_field_path(ptokens, field_path, ctx); if (ret) { @@ -680,7 +647,7 @@ struct bt_ctf_field_path *pathstr_to_field_path(const char *pathstr, } else { /* Absolute path: use found root scope */ field_path->root = root_scope; - BT_LOGV("Detected absolute path: using root scope: " + BT_LOGT("Detected absolute path: using root scope: " "scope=%s", bt_ctf_scope_string(field_path->root)); ret = absolute_ptokens_to_field_path(ptokens, field_path, ctx); if (ret) { @@ -697,7 +664,7 @@ struct bt_ctf_field_path *pathstr_to_field_path(const char *pathstr, const char *field_path_pretty_str = field_path_pretty ? field_path_pretty->str : NULL; - BT_LOGV("Found field path: path=\"%s\", field-path=\"%s\"", + BT_LOGT("Found field path: path=\"%s\", field-path=\"%s\"", pathstr, field_path_pretty_str); if (field_path_pretty) { @@ -812,7 +779,7 @@ int get_field_paths_lca_index(struct bt_ctf_field_path *field_path1, int lca_index = 0; int field_path1_len, field_path2_len; - if (BT_LOG_ON_VERBOSE) { + if (BT_LOG_ON_TRACE) { GString *field_path1_pretty = bt_ctf_field_path_string(field_path1); GString *field_path2_pretty = @@ -822,7 +789,7 @@ int get_field_paths_lca_index(struct bt_ctf_field_path *field_path1, const char *field_path2_pretty_str = field_path2_pretty ? field_path2_pretty->str : NULL; - BT_LOGV("Finding lowest common ancestor (LCA) between two field paths: " + BT_LOGT("Finding lowest common ancestor (LCA) between two field paths: " "field-path-1=\"%s\", field-path-2=\"%s\"", field_path1_pretty_str, field_path2_pretty_str); @@ -838,11 +805,11 @@ int get_field_paths_lca_index(struct bt_ctf_field_path *field_path1, /* * Start from both roots and find the first mismatch. */ - BT_ASSERT(field_path1->root == field_path2->root); + BT_ASSERT_DBG(field_path1->root == field_path2->root); field_path1_len = field_path1->indexes->len; field_path2_len = field_path2->indexes->len; - while (BT_TRUE) { + while (BT_CTF_TRUE) { int target_index, ctx_index; if (lca_index == field_path2_len || @@ -873,7 +840,7 @@ int get_field_paths_lca_index(struct bt_ctf_field_path *field_path1, lca_index++; } - BT_LOGV("Found LCA: lca-index=%d", lca_index); + BT_LOGT("Found LCA: lca-index=%d", lca_index); return lca_index; } @@ -987,7 +954,7 @@ int validate_target_field_path(struct bt_ctf_field_path *target_field_path, } break; default: - abort(); + bt_common_abort(); } end: @@ -1024,7 +991,7 @@ int resolve_sequence_or_variant_type(struct bt_ctf_field_type_common *type, bt_ctf_field_type_common_variant_get_tag_name(type); break; default: - abort(); + bt_common_abort(); } if (!pathstr) { @@ -1099,7 +1066,7 @@ int resolve_sequence_or_variant_type(struct bt_ctf_field_type_common *type, } break; default: - abort(); + bt_common_abort(); } end: @@ -1193,7 +1160,7 @@ int resolve_type(struct bt_ctf_field_type_common *type, struct resolve_context * f_index; } - BT_LOGV("Resolving field type's child field type: " + BT_LOGT("Resolving field type's child field type: " "parent-ft-addr=%p, child-ft-addr=%p, " "index=%" PRId64 ", count=%" PRId64, type, child_type, f_index, field_count); @@ -1222,7 +1189,7 @@ int resolve_root_type(enum bt_ctf_scope root_scope, struct resolve_context *ctx) { int ret; - BT_ASSERT(type_stack_size(ctx->type_stack) == 0); + BT_ASSERT_DBG(type_stack_size(ctx->type_stack) == 0); ctx->root_scope = root_scope; ret = resolve_type(get_type_from_ctx(ctx, root_scope), ctx); ctx->root_scope = BT_CTF_SCOPE_UNKNOWN; @@ -1255,7 +1222,7 @@ int bt_ctf_resolve_types( .root_scope = BT_CTF_SCOPE_UNKNOWN, }; - BT_LOGV("Resolving field types: " + BT_LOGT("Resolving field types: " "packet-header-ft-addr=%p, " "packet-context-ft-addr=%p, " "event-header-ft-addr=%p, " @@ -1333,7 +1300,7 @@ int bt_ctf_resolve_types( } } - BT_LOGV_STR("Resolved field types."); + BT_LOGT_STR("Resolved field types."); end: type_stack_destroy(ctx.type_stack);