X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=liblttng-ust%2Flttng-filter.h;fp=liblttng-ust%2Flttng-filter.h;h=4ef1c757635eaf5edae394df19511c932b5682b0;hb=97b58163ffe6cced54c3d37ae79d4113a9d26455;hp=0000000000000000000000000000000000000000;hpb=34cc6d00668c51d0cb8f1959a2e38a56b147a6c9;p=lttng-ust.git diff --git a/liblttng-ust/lttng-filter.h b/liblttng-ust/lttng-filter.h new file mode 100644 index 00000000..4ef1c757 --- /dev/null +++ b/liblttng-ust/lttng-filter.h @@ -0,0 +1,104 @@ +#ifndef _LTTNG_FILTER_H +#define _LTTNG_FILTER_H + +/* + * lttng-filter.h + * + * LTTng UST filter header. + * + * Copyright (C) 2010-2012 Mathieu Desnoyers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; only + * version 2.1 of the License. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "filter-bytecode.h" + +#define NR_REG 2 + +#ifndef min_t +#define min_t(type, a, b) \ + ((type) (a) < (type) (b) ? (type) (a) : (type) (b)) +#endif + +#ifndef likely +#define likely(x) __builtin_expect(!!(x), 1) +#endif + +#ifndef unlikely +#define unlikely(x) __builtin_expect(!!(x), 0) +#endif + +#ifdef DEBUG +#define dbg_printf(fmt, args...) printf("[debug bytecode] " fmt, ## args) +#else +#define dbg_printf(fmt, args...) \ +do { \ + /* do nothing but check printf format */ \ + if (0) \ + printf("[debug bytecode] " fmt, ## args); \ +} while (0) +#endif + +/* Linked bytecode */ +struct bytecode_runtime { + uint16_t len; + char data[0]; +}; + +enum reg_type { + REG_S64, + REG_DOUBLE, + REG_STRING, + REG_TYPE_UNKNOWN, +}; + +/* Validation registers */ +struct vreg { + enum reg_type type; + int literal; /* is string literal ? */ +}; + +/* Execution registers */ +struct reg { + enum reg_type type; + int64_t v; + double d; + + const char *str; + size_t seq_len; + int literal; /* is string literal ? */ +}; + +const char *print_op(enum filter_op op); + +int lttng_filter_validate_bytecode(struct bytecode_runtime *bytecode); +int lttng_filter_specialize_bytecode(struct bytecode_runtime *bytecode); + +int lttng_filter_false(void *filter_data, + const char *filter_stack_data); +int lttng_filter_interpret_bytecode(void *filter_data, + const char *filter_stack_data); + +#endif /* _LTTNG_FILTER_H */