SIDE_EVENT_FLAG_VARIADIC = (1 << 0),
};
+#define SIDE_EVENT_ENABLED_USER_MASK 0x0000FFFF
+#define SIDE_EVENT_ENABLED_KERNEL_USER_EVENT_MASK 0x80000000
+
struct side_event_description {
uint32_t version;
uint32_t enabled;
.sav = side_sav, \
.len = SIDE_ARRAY_SIZE(side_sav), \
}; \
- tracer_call(desc, &sav_desc); \
+ side_call(desc, &sav_desc); \
}
#define side_event(desc, sav) \
.fields = side_fields, \
.len = SIDE_ARRAY_SIZE(side_fields), \
}; \
- tracer_call_variadic(desc, &sav_desc, &var_struct); \
+ side_call_variadic(desc, &sav_desc, &var_struct); \
}
#define side_event_variadic(desc, sav, var) \
#define side_declare_event(_identifier) \
struct side_event_description _identifier
+void side_call(const struct side_event_description *desc,
+ const struct side_arg_vec_description *sav_desc);
+void side_call_variadic(const struct side_event_description *desc,
+ const struct side_arg_vec_description *sav_desc,
+ const struct side_arg_dynamic_event_struct *var_struct);
+
#endif /* _SIDE_TRACE_H */
all: test
+side.o: side.c
+ gcc -O2 -g -Wall -I../include/ -c -o side.o side.c
+
tracer.o: tracer.c
gcc -O2 -g -Wall -I../include/ -c -o tracer.o tracer.c
test.o: test.c
gcc -O2 -g -Wall -I../include/ -c -o test.o test.c
-test: tracer.o test.o
- gcc -O2 -g -Wall -o test tracer.o test.o
+test: tracer.o test.o side.o
+ gcc -O2 -g -Wall -o test tracer.o test.o side.o
.PHONY: clean
--- /dev/null
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright 2022 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ */
+
+#include <side/trace.h>
+#include "tracer.h"
+
+void side_call(const struct side_event_description *desc, const struct side_arg_vec_description *sav_desc)
+{
+ if (side_unlikely(desc->flags & SIDE_EVENT_FLAG_VARIADIC)) {
+ printf("ERROR: unexpected variadic event description\n");
+ abort();
+ }
+ if (side_unlikely(desc->enabled & SIDE_EVENT_ENABLED_KERNEL_USER_EVENT_MASK)) {
+ // TODO: call kernel ioctl.
+ }
+ //TODO: replace tracer_call by rcu iteration on list of registered callbacks
+ tracer_call(desc, sav_desc);
+}
+
+void side_call_variadic(const struct side_event_description *desc,
+ const struct side_arg_vec_description *sav_desc,
+ const struct side_arg_dynamic_event_struct *var_struct)
+{
+ if (side_unlikely(desc->enabled & SIDE_EVENT_ENABLED_KERNEL_USER_EVENT_MASK)) {
+ // TODO: call kernel ioctl.
+ }
+ //TODO: replace tracer_call by rcu iteration on list of registered callbacks
+ tracer_call_variadic(desc, sav_desc, var_struct);
+}
{
int nr_fields = 0;
- if (side_unlikely(desc->flags & SIDE_EVENT_FLAG_VARIADIC)) {
- printf("ERROR: unexpected variadic event description\n");
- abort();
- }
tracer_print_static_fields(desc, sav_desc, &nr_fields);
if (nr_fields)
printf(" ]");