* 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);
extern int tracepoint_register_lib(struct tracepoint *tracepoints_start,
int tracepoints_count);
+extern int tracepoint_unregister_lib(struct tracepoint *tracepoints_start);
#define TRACEPOINT_LIB \
extern struct tracepoint __start___tracepoints[] __attribute__((weak, visibility("hidden"))); \
{ \
tracepoint_register_lib(__start___tracepoints, \
(((long)__stop___tracepoints)-((long)__start___tracepoints))/sizeof(struct tracepoint)); \
+ } \
+ \
+ static void __attribute__((destructor)) __tracepoints__destroy(void) \
+ { \
+ tracepoint_unregister_lib(__start___tracepoints); \
}
#endif /* _UST_TRACEPOINT_H */