X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=lttng-filter-specialize.c;h=e9a85c78569fa0fda78fae76b9dc2982bd11dd2d;hb=53772db24facd84f1f3ddcf21a1ef5f162608721;hp=7112b0ae0aa3ec3f75ddc48cdb08bb60ad8468f2;hpb=3834b99f4341209754c4955ec853dc250b33ed4b;p=lttng-modules.git diff --git a/lttng-filter-specialize.c b/lttng-filter-specialize.c index 7112b0ae..e9a85c78 100644 --- a/lttng-filter-specialize.c +++ b/lttng-filter-specialize.c @@ -1,33 +1,18 @@ -/* +/* SPDX-License-Identifier: MIT + * * lttng-filter-specialize.c * * LTTng modules filter code specializer. * * Copyright (C) 2010-2016 Mathieu Desnoyers - * - * 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. */ #include #include #include "lib/align.h" +#include + static ssize_t bytecode_reserve_data(struct bytecode_runtime *runtime, size_t align, size_t len) { @@ -263,7 +248,8 @@ static int specialize_get_index(struct bytecode_runtime *runtime, } case OBJECT_TYPE_STRUCT: /* Only generated by the specialize phase. */ - case OBJECT_TYPE_VARIANT: /* Fall-through */ + case OBJECT_TYPE_VARIANT: + lttng_fallthrough; default: printk(KERN_WARNING "Unexpected get index type %d", (int) stack_top->load.object_type); @@ -518,6 +504,7 @@ int lttng_filter_specialize_bytecode(struct lttng_event *event, goto end; case FILTER_OP_RETURN: + case FILTER_OP_RETURN_S64: ret = 0; goto end; @@ -527,8 +514,6 @@ int lttng_filter_specialize_bytecode(struct lttng_event *event, case FILTER_OP_MOD: case FILTER_OP_PLUS: case FILTER_OP_MINUS: - case FILTER_OP_RSHIFT: - case FILTER_OP_LSHIFT: printk(KERN_WARNING "unsupported bytecode op %u\n", (unsigned int) *(filter_opcode_t *) pc); ret = -EINVAL; @@ -804,6 +789,8 @@ int lttng_filter_specialize_bytecode(struct lttng_event *event, case FILTER_OP_LT_S64_DOUBLE: case FILTER_OP_GE_S64_DOUBLE: case FILTER_OP_LE_S64_DOUBLE: + case FILTER_OP_BIT_RSHIFT: + case FILTER_OP_BIT_LSHIFT: case FILTER_OP_BIT_AND: case FILTER_OP_BIT_OR: case FILTER_OP_BIT_XOR: @@ -885,6 +872,13 @@ int lttng_filter_specialize_bytecode(struct lttng_event *event, break; } + case FILTER_OP_UNARY_BIT_NOT: + { + /* Pop 1, push 1 */ + next_pc += sizeof(struct unary_op); + break; + } + case FILTER_OP_UNARY_PLUS_S64: case FILTER_OP_UNARY_MINUS_S64: case FILTER_OP_UNARY_NOT_S64: