X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fplugins%2Fctf%2Fcommon%2Fmetadata%2Fvisitor-semantic-validator.c;h=d22e4eee02dd30803ebf92c22bfab0c7530cf9a0;hb=9103e903a89377e9cfad13905d4f4b650aecd061;hp=5592d6d577511aa74060d50aa577157c1c5f91de;hpb=578e048b5debf169e286e5b5cc747b5d6c16886d;p=babeltrace.git diff --git a/src/plugins/ctf/common/metadata/visitor-semantic-validator.c b/src/plugins/ctf/common/metadata/visitor-semantic-validator.c index 5592d6d5..d22e4eee 100644 --- a/src/plugins/ctf/common/metadata/visitor-semantic-validator.c +++ b/src/plugins/ctf/common/metadata/visitor-semantic-validator.c @@ -24,8 +24,10 @@ * SOFTWARE. */ -#define BT_LOG_TAG "PLUGIN-CTF-METADATA-SEMANTIC-VALIDATOR-VISITOR" -#include "logging.h" +#define BT_COMP_LOG_SELF_COMP (log_cfg->self_comp) +#define BT_LOG_OUTPUT_LEVEL (log_cfg->log_level) +#define BT_LOG_TAG "PLUGIN/CTF/META/SEMANTIC-VALIDATOR-VISITOR" +#include "logging/comp-logging.h" #include #include @@ -37,17 +39,19 @@ #include #include "common/list.h" #include "scanner.h" -#include "parser.h" #include "ast.h" +#include "logging.h" #define _bt_list_first_entry(ptr, type, member) \ bt_list_entry((ptr)->next, type, member) static -int _ctf_visitor_semantic_check(int depth, struct ctf_node *node); +int _ctf_visitor_semantic_check(int depth, struct ctf_node *node, + struct meta_log_config *log_cfg); static -int ctf_visitor_unary_expression(int depth, struct ctf_node *node) +int ctf_visitor_unary_expression(int depth, struct ctf_node *node, + struct meta_log_config *log_cfg) { struct ctf_node *iter; int is_ctf_exp = 0, is_ctf_exp_left = 0; @@ -64,7 +68,7 @@ int ctf_visitor_unary_expression(int depth, struct ctf_node *node) * We are only allowed to be a string. */ if (node->u.unary_expression.type != UNARY_STRING) { - _BT_LOGE_LINENO(node->lineno, + _BT_COMP_LOGE_LINENO(node->lineno, "Left child of a CTF expression is only allowed to be a string."); goto errperm; } @@ -82,7 +86,7 @@ int ctf_visitor_unary_expression(int depth, struct ctf_node *node) case UNARY_STRING: break; default: - _BT_LOGE_LINENO(node->lineno, + _BT_COMP_LOGE_LINENO(node->lineno, "Children of field class declarator and `enum` can only be unsigned numeric constants or references to fields (e.g., `a.b.c`)."); goto errperm; } @@ -96,7 +100,7 @@ int ctf_visitor_unary_expression(int depth, struct ctf_node *node) case UNARY_UNSIGNED_CONSTANT: break; default: - _BT_LOGE_LINENO(node->lineno, + _BT_COMP_LOGE_LINENO(node->lineno, "Structure alignment attribute can only be an unsigned numeric constant."); goto errperm; } @@ -111,7 +115,7 @@ int ctf_visitor_unary_expression(int depth, struct ctf_node *node) * We disallow nested unary expressions and "sbrac" unary * expressions. */ - _BT_LOGE_LINENO(node->lineno, + _BT_COMP_LOGE_LINENO(node->lineno, "Nested unary expressions not allowed (`()` and `[]`)."); goto errperm; @@ -146,7 +150,7 @@ int ctf_visitor_unary_expression(int depth, struct ctf_node *node) &node->parent->u.ctf_expression.right, struct ctf_node, siblings) != node) { - _BT_LOGE_LINENO(node->lineno, + _BT_COMP_LOGE_LINENO(node->lineno, "Empty link is not allowed except on first node of unary expression (need to separate nodes with `.` or `->`)."); goto errperm; } @@ -155,7 +159,7 @@ int ctf_visitor_unary_expression(int depth, struct ctf_node *node) case UNARY_ARROWLINK: /* We only allow -> and . links between children of ctf_expression. */ if (node->parent->type != NODE_CTF_EXPRESSION) { - _BT_LOGE_LINENO(node->lineno, + _BT_COMP_LOGE_LINENO(node->lineno, "Links `.` and `->` are only allowed as children of CTF expression."); goto errperm; } @@ -164,7 +168,7 @@ int ctf_visitor_unary_expression(int depth, struct ctf_node *node) * This includes "", '' and non-quoted identifiers. */ if (node->u.unary_expression.type != UNARY_STRING) { - _BT_LOGE_LINENO(node->lineno, + _BT_COMP_LOGE_LINENO(node->lineno, "Links `.` and `->` are only allowed to separate strings and identifiers."); goto errperm; } @@ -174,7 +178,7 @@ int ctf_visitor_unary_expression(int depth, struct ctf_node *node) &node->parent->u.ctf_expression.right, struct ctf_node, siblings) == node) { - _BT_LOGE_LINENO(node->lineno, + _BT_COMP_LOGE_LINENO(node->lineno, "Links `.` and `->` are not allowed before first node of the unary expression list."); goto errperm; } @@ -182,7 +186,7 @@ int ctf_visitor_unary_expression(int depth, struct ctf_node *node) case UNARY_DOTDOTDOT: /* We only allow ... link between children of enumerator. */ if (node->parent->type != NODE_ENUMERATOR) { - _BT_LOGE_LINENO(node->lineno, + _BT_COMP_LOGE_LINENO(node->lineno, "Link `...` is only allowed within enumerator."); goto errperm; } @@ -190,13 +194,13 @@ int ctf_visitor_unary_expression(int depth, struct ctf_node *node) if (_bt_list_first_entry(&node->parent->u.enumerator.values, struct ctf_node, siblings) == node) { - _BT_LOGE_LINENO(node->lineno, + _BT_COMP_LOGE_LINENO(node->lineno, "Link `...` is not allowed on the first node of the unary expression list."); goto errperm; } break; default: - _BT_LOGE_LINENO(node->lineno, + _BT_COMP_LOGE_LINENO(node->lineno, "Unknown expression link type: type=%d", node->u.unary_expression.link); return -EINVAL; @@ -204,20 +208,21 @@ int ctf_visitor_unary_expression(int depth, struct ctf_node *node) return 0; errinval: - _BT_LOGE_LINENO(node->lineno, + _BT_COMP_LOGE_LINENO(node->lineno, "Incoherent parent node's type: node-type=%s, parent-node-type=%s", node_type(node), node_type(node->parent)); return -EINVAL; /* Incoherent structure */ errperm: - _BT_LOGE_LINENO(node->lineno, + _BT_COMP_LOGE_LINENO(node->lineno, "Semantic error: node-type=%s, parent-node-type=%s", node_type(node), node_type(node->parent)); return -EPERM; /* Structure not allowed */ } static -int ctf_visitor_field_class_specifier_list(int depth, struct ctf_node *node) +int ctf_visitor_field_class_specifier_list(int depth, struct ctf_node *node, + struct meta_log_config *log_cfg) { switch (node->parent->type) { case NODE_CTF_EXPRESSION: @@ -252,14 +257,15 @@ int ctf_visitor_field_class_specifier_list(int depth, struct ctf_node *node) } return 0; errinval: - _BT_LOGE_LINENO(node->lineno, + _BT_COMP_LOGE_LINENO(node->lineno, "Incoherent parent node's type: node-type=%s, parent-node-type=%s", node_type(node), node_type(node->parent)); return -EINVAL; /* Incoherent structure */ } static -int ctf_visitor_field_class_specifier(int depth, struct ctf_node *node) +int ctf_visitor_field_class_specifier(int depth, struct ctf_node *node, + struct meta_log_config *log_cfg) { switch (node->parent->type) { case NODE_TYPE_SPECIFIER_LIST: @@ -294,14 +300,15 @@ int ctf_visitor_field_class_specifier(int depth, struct ctf_node *node) } return 0; errinval: - _BT_LOGE_LINENO(node->lineno, + _BT_COMP_LOGE_LINENO(node->lineno, "Incoherent parent node's type: node-type=%s, parent-node-type=%s", node_type(node), node_type(node->parent)); return -EINVAL; /* Incoherent structure */ } static -int ctf_visitor_field_class_declarator(int depth, struct ctf_node *node) +int ctf_visitor_field_class_declarator(int depth, struct ctf_node *node, + struct meta_log_config *log_cfg) { int ret = 0; struct ctf_node *iter; @@ -350,7 +357,7 @@ int ctf_visitor_field_class_declarator(int depth, struct ctf_node *node) } } if (node->u.field_class_declarator.type == TYPEDEC_ID && - node->u.field_class_declarator.u.id != NULL) + node->u.field_class_declarator.u.id) goto errperm; break; /* OK */ case NODE_TYPEDEF: @@ -382,7 +389,7 @@ int ctf_visitor_field_class_declarator(int depth, struct ctf_node *node) bt_list_for_each_entry(iter, &node->u.field_class_declarator.pointers, siblings) { - ret = _ctf_visitor_semantic_check(depth + 1, iter); + ret = _ctf_visitor_semantic_check(depth + 1, iter, log_cfg); if (ret) return ret; } @@ -394,7 +401,8 @@ int ctf_visitor_field_class_declarator(int depth, struct ctf_node *node) { if (node->u.field_class_declarator.u.nested.field_class_declarator) { ret = _ctf_visitor_semantic_check(depth + 1, - node->u.field_class_declarator.u.nested.field_class_declarator); + node->u.field_class_declarator.u.nested.field_class_declarator, + log_cfg); if (ret) return ret; } @@ -402,25 +410,27 @@ int ctf_visitor_field_class_declarator(int depth, struct ctf_node *node) bt_list_for_each_entry(iter, &node->u.field_class_declarator.u.nested.length, siblings) { if (iter->type != NODE_UNARY_EXPRESSION) { - _BT_LOGE_LINENO(node->lineno, + _BT_COMP_LOGE_LINENO(node->lineno, "Expecting unary expression as length: node-type=%s", node_type(iter)); return -EINVAL; } - ret = _ctf_visitor_semantic_check(depth + 1, iter); + ret = _ctf_visitor_semantic_check(depth + 1, + iter, log_cfg); if (ret) return ret; } } else { if (node->parent->type == NODE_TYPEALIAS_TARGET) { - _BT_LOGE_LINENO(node->lineno, + _BT_COMP_LOGE_LINENO(node->lineno, "Abstract array declarator not permitted as target of field class alias."); return -EINVAL; } } if (node->u.field_class_declarator.bitfield_len) { ret = _ctf_visitor_semantic_check(depth + 1, - node->u.field_class_declarator.bitfield_len); + node->u.field_class_declarator.bitfield_len, + log_cfg); if (ret) return ret; } @@ -428,7 +438,7 @@ int ctf_visitor_field_class_declarator(int depth, struct ctf_node *node) } case TYPEDEC_UNKNOWN: default: - _BT_LOGE_LINENO(node->lineno, + _BT_COMP_LOGE_LINENO(node->lineno, "Unknown field class declarator: type=%d", node->u.field_class_declarator.type); return -EINVAL; @@ -437,20 +447,21 @@ int ctf_visitor_field_class_declarator(int depth, struct ctf_node *node) return 0; errinval: - _BT_LOGE_LINENO(node->lineno, + _BT_COMP_LOGE_LINENO(node->lineno, "Incoherent parent node's type: node-type=%s, parent-node-type=%s", node_type(node), node_type(node->parent)); return -EINVAL; /* Incoherent structure */ errperm: - _BT_LOGE_LINENO(node->lineno, + _BT_COMP_LOGE_LINENO(node->lineno, "Semantic error: node-type=%s, parent-node-type=%s", node_type(node), node_type(node->parent)); return -EPERM; /* Structure not allowed */ } static -int _ctf_visitor_semantic_check(int depth, struct ctf_node *node) +int _ctf_visitor_semantic_check(int depth, struct ctf_node *node, + struct meta_log_config *log_cfg) { int ret = 0; struct ctf_node *iter; @@ -461,22 +472,26 @@ int _ctf_visitor_semantic_check(int depth, struct ctf_node *node) switch (node->type) { case NODE_ROOT: bt_list_for_each_entry(iter, &node->u.root.declaration_list, siblings) { - ret = _ctf_visitor_semantic_check(depth + 1, iter); + ret = _ctf_visitor_semantic_check(depth + 1, iter, + log_cfg); if (ret) return ret; } bt_list_for_each_entry(iter, &node->u.root.trace, siblings) { - ret = _ctf_visitor_semantic_check(depth + 1, iter); + ret = _ctf_visitor_semantic_check(depth + 1, iter, + log_cfg); if (ret) return ret; } bt_list_for_each_entry(iter, &node->u.root.stream, siblings) { - ret = _ctf_visitor_semantic_check(depth + 1, iter); + ret = _ctf_visitor_semantic_check(depth + 1, iter, + log_cfg); if (ret) return ret; } bt_list_for_each_entry(iter, &node->u.root.event, siblings) { - ret = _ctf_visitor_semantic_check(depth + 1, iter); + ret = _ctf_visitor_semantic_check(depth + 1, iter, + log_cfg); if (ret) return ret; } @@ -491,7 +506,8 @@ int _ctf_visitor_semantic_check(int depth, struct ctf_node *node) } bt_list_for_each_entry(iter, &node->u.event.declaration_list, siblings) { - ret = _ctf_visitor_semantic_check(depth + 1, iter); + ret = _ctf_visitor_semantic_check(depth + 1, iter, + log_cfg); if (ret) return ret; } @@ -505,7 +521,8 @@ int _ctf_visitor_semantic_check(int depth, struct ctf_node *node) } bt_list_for_each_entry(iter, &node->u.stream.declaration_list, siblings) { - ret = _ctf_visitor_semantic_check(depth + 1, iter); + ret = _ctf_visitor_semantic_check(depth + 1, iter, + log_cfg); if (ret) return ret; } @@ -519,7 +536,8 @@ int _ctf_visitor_semantic_check(int depth, struct ctf_node *node) } bt_list_for_each_entry(iter, &node->u.env.declaration_list, siblings) { - ret = _ctf_visitor_semantic_check(depth + 1, iter); + ret = _ctf_visitor_semantic_check(depth + 1, iter, + log_cfg); if (ret) return ret; } @@ -533,7 +551,8 @@ int _ctf_visitor_semantic_check(int depth, struct ctf_node *node) } bt_list_for_each_entry(iter, &node->u.trace.declaration_list, siblings) { - ret = _ctf_visitor_semantic_check(depth + 1, iter); + ret = _ctf_visitor_semantic_check(depth + 1, iter, + log_cfg); if (ret) return ret; } @@ -547,7 +566,8 @@ int _ctf_visitor_semantic_check(int depth, struct ctf_node *node) } bt_list_for_each_entry(iter, &node->u.clock.declaration_list, siblings) { - ret = _ctf_visitor_semantic_check(depth + 1, iter); + ret = _ctf_visitor_semantic_check(depth + 1, iter, + log_cfg); if (ret) return ret; } @@ -561,7 +581,8 @@ int _ctf_visitor_semantic_check(int depth, struct ctf_node *node) } bt_list_for_each_entry(iter, &node->u.callsite.declaration_list, siblings) { - ret = _ctf_visitor_semantic_check(depth + 1, iter); + ret = _ctf_visitor_semantic_check(depth + 1, iter, + log_cfg); if (ret) return ret; } @@ -602,19 +623,21 @@ int _ctf_visitor_semantic_check(int depth, struct ctf_node *node) depth++; bt_list_for_each_entry(iter, &node->u.ctf_expression.left, siblings) { - ret = _ctf_visitor_semantic_check(depth + 1, iter); + ret = _ctf_visitor_semantic_check(depth + 1, iter, + log_cfg); if (ret) return ret; } bt_list_for_each_entry(iter, &node->u.ctf_expression.right, siblings) { - ret = _ctf_visitor_semantic_check(depth + 1, iter); + ret = _ctf_visitor_semantic_check(depth + 1, iter, + log_cfg); if (ret) return ret; } depth--; break; case NODE_UNARY_EXPRESSION: - return ctf_visitor_unary_expression(depth, node); + return ctf_visitor_unary_expression(depth, node, log_cfg); case NODE_TYPEDEF: switch (node->parent->type) { @@ -651,11 +674,13 @@ int _ctf_visitor_semantic_check(int depth, struct ctf_node *node) depth++; ret = _ctf_visitor_semantic_check(depth + 1, - node->u.field_class_def.field_class_specifier_list); + node->u.field_class_def.field_class_specifier_list, + log_cfg); if (ret) return ret; bt_list_for_each_entry(iter, &node->u.field_class_def.field_class_declarators, siblings) { - ret = _ctf_visitor_semantic_check(depth + 1, iter); + ret = _ctf_visitor_semantic_check(depth + 1, iter, + log_cfg); if (ret) return ret; } @@ -674,18 +699,20 @@ int _ctf_visitor_semantic_check(int depth, struct ctf_node *node) depth++; ret = _ctf_visitor_semantic_check(depth + 1, - node->u.field_class_alias_target.field_class_specifier_list); + node->u.field_class_alias_target.field_class_specifier_list, + log_cfg); if (ret) return ret; nr_declarators = 0; bt_list_for_each_entry(iter, &node->u.field_class_alias_target.field_class_declarators, siblings) { - ret = _ctf_visitor_semantic_check(depth + 1, iter); + ret = _ctf_visitor_semantic_check(depth + 1, iter, + log_cfg); if (ret) return ret; nr_declarators++; } if (nr_declarators > 1) { - _BT_LOGE_LINENO(node->lineno, + _BT_COMP_LOGE_LINENO(node->lineno, "Too many declarators in field class alias's name (maximum is 1): count=%d", nr_declarators); return -EINVAL; @@ -706,18 +733,20 @@ int _ctf_visitor_semantic_check(int depth, struct ctf_node *node) depth++; ret = _ctf_visitor_semantic_check(depth + 1, - node->u.field_class_alias_name.field_class_specifier_list); + node->u.field_class_alias_name.field_class_specifier_list, + log_cfg); if (ret) return ret; nr_declarators = 0; bt_list_for_each_entry(iter, &node->u.field_class_alias_name.field_class_declarators, siblings) { - ret = _ctf_visitor_semantic_check(depth + 1, iter); + ret = _ctf_visitor_semantic_check(depth + 1, iter, + log_cfg); if (ret) return ret; nr_declarators++; } if (nr_declarators > 1) { - _BT_LOGE_LINENO(node->lineno, + _BT_COMP_LOGE_LINENO(node->lineno, "Too many declarators in field class alias's name (maximum is 1): count=%d", nr_declarators); return -EINVAL; @@ -758,21 +787,25 @@ int _ctf_visitor_semantic_check(int depth, struct ctf_node *node) goto errinval; } - ret = _ctf_visitor_semantic_check(depth + 1, node->u.field_class_alias.target); + ret = _ctf_visitor_semantic_check(depth + 1, + node->u.field_class_alias.target, log_cfg); if (ret) return ret; - ret = _ctf_visitor_semantic_check(depth + 1, node->u.field_class_alias.alias); + ret = _ctf_visitor_semantic_check(depth + 1, + node->u.field_class_alias.alias, log_cfg); if (ret) return ret; break; case NODE_TYPE_SPECIFIER_LIST: - ret = ctf_visitor_field_class_specifier_list(depth, node); + ret = ctf_visitor_field_class_specifier_list(depth, node, + log_cfg); if (ret) return ret; break; case NODE_TYPE_SPECIFIER: - ret = ctf_visitor_field_class_specifier(depth, node); + ret = ctf_visitor_field_class_specifier(depth, node, + log_cfg); if (ret) return ret; break; @@ -785,7 +818,8 @@ int _ctf_visitor_semantic_check(int depth, struct ctf_node *node) } break; case NODE_TYPE_DECLARATOR: - ret = ctf_visitor_field_class_declarator(depth, node); + ret = ctf_visitor_field_class_declarator(depth, node, + log_cfg); if (ret) return ret; break; @@ -801,7 +835,8 @@ int _ctf_visitor_semantic_check(int depth, struct ctf_node *node) goto errperm; } bt_list_for_each_entry(iter, &node->u.floating_point.expressions, siblings) { - ret = _ctf_visitor_semantic_check(depth + 1, iter); + ret = _ctf_visitor_semantic_check(depth + 1, iter, + log_cfg); if (ret) return ret; } @@ -816,7 +851,8 @@ int _ctf_visitor_semantic_check(int depth, struct ctf_node *node) } bt_list_for_each_entry(iter, &node->u.integer.expressions, siblings) { - ret = _ctf_visitor_semantic_check(depth + 1, iter); + ret = _ctf_visitor_semantic_check(depth + 1, iter, + log_cfg); if (ret) return ret; } @@ -833,7 +869,8 @@ int _ctf_visitor_semantic_check(int depth, struct ctf_node *node) } bt_list_for_each_entry(iter, &node->u.string.expressions, siblings) { - ret = _ctf_visitor_semantic_check(depth + 1, iter); + ret = _ctf_visitor_semantic_check(depth + 1, iter, + log_cfg); if (ret) return ret; } @@ -860,7 +897,7 @@ int _ctf_visitor_semantic_check(int depth, struct ctf_node *node) || (iter->u.unary_expression.type != UNARY_SIGNED_CONSTANT && iter->u.unary_expression.type != UNARY_UNSIGNED_CONSTANT) || iter->u.unary_expression.link != UNARY_LINK_UNKNOWN) { - _BT_LOGE_LINENO(iter->lineno, + _BT_COMP_LOGE_LINENO(iter->lineno, "First unary expression of enumerator is unexpected."); goto errperm; } @@ -869,7 +906,7 @@ int _ctf_visitor_semantic_check(int depth, struct ctf_node *node) || (iter->u.unary_expression.type != UNARY_SIGNED_CONSTANT && iter->u.unary_expression.type != UNARY_UNSIGNED_CONSTANT) || iter->u.unary_expression.link != UNARY_DOTDOTDOT) { - _BT_LOGE_LINENO(iter->lineno, + _BT_COMP_LOGE_LINENO(iter->lineno, "Second unary expression of enumerator is unexpected."); goto errperm; } @@ -881,7 +918,8 @@ int _ctf_visitor_semantic_check(int depth, struct ctf_node *node) } bt_list_for_each_entry(iter, &node->u.enumerator.values, siblings) { - ret = _ctf_visitor_semantic_check(depth + 1, iter); + ret = _ctf_visitor_semantic_check(depth + 1, iter, + log_cfg); if (ret) return ret; } @@ -898,12 +936,14 @@ int _ctf_visitor_semantic_check(int depth, struct ctf_node *node) } depth++; - ret = _ctf_visitor_semantic_check(depth + 1, node->u._enum.container_field_class); + ret = _ctf_visitor_semantic_check(depth + 1, + node->u._enum.container_field_class, log_cfg); if (ret) return ret; bt_list_for_each_entry(iter, &node->u._enum.enumerator_list, siblings) { - ret = _ctf_visitor_semantic_check(depth + 1, iter); + ret = _ctf_visitor_semantic_check(depth + 1, iter, + log_cfg); if (ret) return ret; } @@ -918,11 +958,13 @@ int _ctf_visitor_semantic_check(int depth, struct ctf_node *node) goto errinval; } ret = _ctf_visitor_semantic_check(depth + 1, - node->u.struct_or_variant_declaration.field_class_specifier_list); + node->u.struct_or_variant_declaration.field_class_specifier_list, + log_cfg); if (ret) return ret; bt_list_for_each_entry(iter, &node->u.struct_or_variant_declaration.field_class_declarators, siblings) { - ret = _ctf_visitor_semantic_check(depth + 1, iter); + ret = _ctf_visitor_semantic_check(depth + 1, iter, + log_cfg); if (ret) return ret; } @@ -938,7 +980,8 @@ int _ctf_visitor_semantic_check(int depth, struct ctf_node *node) goto errperm; } bt_list_for_each_entry(iter, &node->u.variant.declaration_list, siblings) { - ret = _ctf_visitor_semantic_check(depth + 1, iter); + ret = _ctf_visitor_semantic_check(depth + 1, iter, + log_cfg); if (ret) return ret; } @@ -955,7 +998,8 @@ int _ctf_visitor_semantic_check(int depth, struct ctf_node *node) goto errperm; } bt_list_for_each_entry(iter, &node->u._struct.declaration_list, siblings) { - ret = _ctf_visitor_semantic_check(depth + 1, iter); + ret = _ctf_visitor_semantic_check(depth + 1, iter, + log_cfg); if (ret) return ret; } @@ -963,26 +1007,27 @@ int _ctf_visitor_semantic_check(int depth, struct ctf_node *node) case NODE_UNKNOWN: default: - _BT_LOGE_LINENO(node->lineno, + _BT_COMP_LOGE_LINENO(node->lineno, "Unknown node type: type=%d", node->type); return -EINVAL; } return ret; errinval: - _BT_LOGE_LINENO(node->lineno, + _BT_COMP_LOGE_LINENO(node->lineno, "Incoherent parent node's type: node-type=%s, parent-node-type=%s", node_type(node), node_type(node->parent)); return -EINVAL; /* Incoherent structure */ errperm: - _BT_LOGE_LINENO(node->lineno, + _BT_COMP_LOGE_LINENO(node->lineno, "Semantic error: node-type=%s, parent-node-type=%s", node_type(node), node_type(node->parent)); return -EPERM; /* Structure not allowed */ } -int ctf_visitor_semantic_check(int depth, struct ctf_node *node) +int ctf_visitor_semantic_check(int depth, struct ctf_node *node, + struct meta_log_config *log_cfg) { int ret = 0; @@ -991,17 +1036,17 @@ int ctf_visitor_semantic_check(int depth, struct ctf_node *node) * take the safe route and recreate them at each validation, just in * case the structure has changed. */ - ret = ctf_visitor_parent_links(depth, node); + ret = ctf_visitor_parent_links(depth, node, log_cfg); if (ret) { - _BT_LOGE_LINENO(node->lineno, + _BT_COMP_LOGE_LINENO(node->lineno, "Cannot create parent links in metadata's AST: " "ret=%d", ret); goto end; } - ret = _ctf_visitor_semantic_check(depth, node); + ret = _ctf_visitor_semantic_check(depth, node, log_cfg); if (ret) { - _BT_LOGE_LINENO(node->lineno, + _BT_COMP_LOGE_LINENO(node->lineno, "Cannot check metadata's AST semantics: " "ret=%d", ret); goto end;