Filter: split passes into separate components
[lttng-ust.git] / liblttng-ust / lttng-filter.h
diff --git a/liblttng-ust/lttng-filter.h b/liblttng-ust/lttng-filter.h
new file mode 100644 (file)
index 0000000..4ef1c75
--- /dev/null
@@ -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 <mathieu.desnoyers@efficios.com>
+ *
+ * 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 <errno.h>
+#include <stdio.h>
+#include <helper.h>
+#include <lttng/ust-events.h>
+#include <stdint.h>
+#include <errno.h>
+#include <string.h>
+#include <inttypes.h>
+#include <limits.h>
+#include <usterr-signal-safe.h>
+#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 */
This page took 0.024223 seconds and 4 git commands to generate.