-#ifndef _LINUX_TRACEPOINT_H
-#define _LINUX_TRACEPOINT_H
+#ifndef _UST_TRACEPOINT_H
+#define _UST_TRACEPOINT_H
/*
* Copyright (C) 2008 Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
#include <urcu-bp.h>
#include <ust/immediate.h>
-#include "kernelcompat.h"
+#include <ust/kernelcompat.h>
struct module;
struct tracepoint;
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__((visibility("hidden"))); \
- extern struct tracepoint __stop___tracepoints[] __attribute__((visibility("hidden"))); \
+ extern struct tracepoint __start___tracepoints[] __attribute__((weak, visibility("hidden"))); \
+ extern struct tracepoint __stop___tracepoints[] __attribute__((weak, visibility("hidden"))); \
static void __attribute__((constructor)) __tracepoints__init(void) \
{ \
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
+#endif /* _UST_TRACEPOINT_H */