#define _UST_MARKER_H
#include <stdarg.h>
-//ust// #include <linux/types.h>
#include <ust/immediate.h>
-//ust// #include <linux/ltt-channels.h>
#include <ust/kernelcompat.h>
#include <urcu/list.h>
#include <ust/processor.h>
#include <bits/wordsize.h>
-//ust// struct module;
-//ust// struct task_struct;
struct marker;
/* To stringify the expansion of a define */
* is not unusual as it can be the result of function inlining. \
*/ \
".ifndef __mstrtab_" XSTR(channel) "_" XSTR(name) "_channel_" XSTR(unique) "\n\t" \
+ /*".section __markers_strings\n\t"*/ \
".section __markers_strings,\"aw\",@progbits\n\t" \
"__mstrtab_" XSTR(channel) "_" XSTR(name) "_channel_" XSTR(unique) ":\n\t" \
".string \"" XSTR(channel) "\"\n\t" \
".endif\n\t" \
); \
asm volatile ( \
+ /*".section __markers\n\t"*/ \
".section __markers,\"aw\",@progbits\n\t" \
".balign 8\n\t" \
"2:\n\t" \
#define DEFINE_MARKER(channel, name, format, unique, m) \
_DEFINE_MARKER(channel, name, NULL, NULL, format, unique, m)
-#define DEFINE_MARKER_TP(channel, name, tp_name, tp_cb, format, unique, m) \
- _DEFINE_MARKER(channel, name, #tp_name, tp_cb, format, unique, m)
+#define DEFINE_MARKER_TP(channel, name, tp_name, tp_cb, format) \
+ _DEFINE_MARKER_TP(channel, name, #tp_name, tp_cb, format)
+
+#define _DEFINE_MARKER_TP(channel, name, tp_name_str, tp_cb, format) \
+ static const char __mstrtab_##channel##_##name[] \
+ __attribute__((section("__markers_strings"))) \
+ = #channel "\0" #name "\0" format; \
+ static struct marker __mark_##channel##_##name \
+ __attribute__((section("__markers"), aligned(8))) = \
+ { __mstrtab_##channel##_##name, \
+ &__mstrtab_##channel##_##name[sizeof(#channel)], \
+ &__mstrtab_##channel##_##name[sizeof(#channel) + \
+ sizeof(#name)], \
+ 0, 0, 0, 0, marker_probe_cb, \
+ { __mark_empty_function, NULL}, \
+ NULL, tp_name_str, tp_cb }
/*
* Make sure the alignment of the structure in the __markers section will
* Keep in sync with vmlinux.lds.h.
*/
-#define TPPROTO(args...) args
-#define TPARGS(args...) args
+#define TP_PROTO(args...) args
+#define TP_ARGS(args...) args
#define CONFIG_TRACEPOINTS
#ifdef CONFIG_TRACEPOINTS
if (!generic) { \
if (unlikely(imv_read(__tracepoint_##name.state))) \
__DO_TRACE(&__tracepoint_##name, \
- TPPROTO(proto), TPARGS(args)); \
+ TP_PROTO(proto), TP_ARGS(args)); \
} else { \
if (unlikely(_imv_read(__tracepoint_##name.state))) \
__DO_TRACE(&__tracepoint_##name, \
- TPPROTO(proto), TPARGS(args)); \
+ TP_PROTO(proto), TP_ARGS(args)); \
} \
} while (0)
extern struct tracepoint __tracepoint_##name; \
static inline void trace_##name(proto) \
{ \
- __CHECK_TRACE(name, 0, TPPROTO(proto), TPARGS(args)); \
+ __CHECK_TRACE(name, 0, TP_PROTO(proto), TP_ARGS(args)); \
} \
static inline void _trace_##name(proto) \
{ \
- __CHECK_TRACE(name, 1, TPPROTO(proto), TPARGS(args)); \
+ __CHECK_TRACE(name, 1, TP_PROTO(proto), TP_ARGS(args)); \
} \
static inline int register_trace_##name(void (*probe)(proto)) \
{ \
__attribute__((section("__tracepoints"), aligned(32))) = \
{ __tpstrtab_##name, 0, NULL }
-#define EXPORT_TRACEPOINT_SYMBOL_GPL(name) \
- EXPORT_SYMBOL_GPL(__tracepoint_##name)
-#define EXPORT_TRACEPOINT_SYMBOL(name) \
- EXPORT_SYMBOL(__tracepoint_##name)
-
extern void tracepoint_update_probe_range(struct tracepoint *begin,
struct tracepoint *end);
* Ported to userspace by Pierre-Marc Fournier.
*/
-//ust// #include <linux/module.h>
-//ust// #include <linux/mutex.h>
-//ust// #include <linux/types.h>
-//ust// #include <linux/jhash.h>
-//ust// #include <linux/list.h>
-//ust// #include <linux/rcupdate.h>
-//ust// #include <linux/tracepoint.h>
-//ust// #include <linux/err.h>
-//ust// #include <linux/slab.h>
-//ust// #include <linux/immediate.h>
-
#include <errno.h>
#include <ust/kernelcompat.h>
#include <ust/tracepoint.h>
#include "usterr.h"
-//#include "list.h"
#define _LGPL_SOURCE
#include <urcu-bp.h>