* Copyright (C) 2008 Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
* Copyright (C) 2009 Pierre-Marc Fournier
*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
+ * 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; either
+ * version 2.1 of the License, or (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful,
+ * 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 General Public License for more details.
+ * 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 General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * 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
*
* Heavily inspired from the Linux Kernel Markers.
*
//#include <linux/types.h>
//#include <linux/rcupdate.h>
-#include "urcu.h"
+#define _LGPL_SOURCE
+#include <urcu-bp.h>
+
#include "immediate.h"
#include "kernelcompat.h"
#define TPPROTO(args...) args
#define TPARGS(args...) args
-//ust// #ifdef CONFIG_TRACEPOINTS
+#define CONFIG_TRACEPOINTS
+#ifdef CONFIG_TRACEPOINTS
/*
* it_func[0] is never NULL because there is at least one element in the array
extern void tracepoint_update_probe_range(struct tracepoint *begin,
struct tracepoint *end);
-//ust// #else /* !CONFIG_TRACEPOINTS */
-//ust// #define DECLARE_TRACE(name, proto, args) \
-//ust// static inline void trace_##name(proto) \
-//ust// { } \
-//ust// static inline void _trace_##name(proto) \
-//ust// { } \
-//ust// static inline int register_trace_##name(void (*probe)(proto)) \
-//ust// { \
-//ust// return -ENOSYS; \
-//ust// } \
-//ust// static inline int unregister_trace_##name(void (*probe)(proto)) \
-//ust// { \
-//ust// return -ENOSYS; \
-//ust// }
-//ust//
-//ust// #define DEFINE_TRACE(name)
-//ust// #define EXPORT_TRACEPOINT_SYMBOL_GPL(name)
-//ust// #define EXPORT_TRACEPOINT_SYMBOL(name)
-//ust//
-//ust// static inline void tracepoint_update_probe_range(struct tracepoint *begin,
-//ust// struct tracepoint *end)
-//ust// { }
-//ust// #endif /* CONFIG_TRACEPOINTS */
+#else /* !CONFIG_TRACEPOINTS */
+#define DECLARE_TRACE(name, proto, args) \
+ static inline void trace_##name(proto) \
+ { } \
+ static inline void _trace_##name(proto) \
+ { } \
+ static inline int register_trace_##name(void (*probe)(proto)) \
+ { \
+ return -ENOSYS; \
+ } \
+ static inline int unregister_trace_##name(void (*probe)(proto)) \
+ { \
+ return -ENOSYS; \
+ }
+
+#define DEFINE_TRACE(name)
+#define EXPORT_TRACEPOINT_SYMBOL_GPL(name)
+#define EXPORT_TRACEPOINT_SYMBOL(name)
+
+static inline void tracepoint_update_probe_range(struct tracepoint *begin,
+ struct tracepoint *end)
+{ }
+#endif /* CONFIG_TRACEPOINTS */
/*
* Connect a probe to a tracepoint.
*/
static inline void tracepoint_synchronize_unregister(void)
{
- synchronize_sched();
+//ust// synchronize_sched();
}
struct tracepoint_lib {
struct list_head list;
};
-#define TRACEPOINT_LIB \
-extern struct tracepoint __start___tracepoints[] __attribute__((visibility("hidden"))); \
-extern struct tracepoint __stop___tracepoints[] __attribute__((visibility("hidden"))); \
- \
-static void __attribute__((constructor)) __tracepoints__init(void) \
-{ \
- tracepoint_register_lib(__start___tracepoints, (((long)__stop___tracepoints)-((long)__start___tracepoints))/sizeof(struct tracepoint));\
-}
+extern int tracepoint_register_lib(struct tracepoint *tracepoints_start,
+ int tracepoints_count);
+
+#define TRACEPOINT_LIB \
+ extern struct tracepoint __start___tracepoints[] __attribute__((visibility("hidden"))); \
+ extern struct tracepoint __stop___tracepoints[] __attribute__((visibility("hidden"))); \
+ static void __attribute__((constructor)) __tracepoints__init(void) \
+ { \
+ tracepoint_register_lib(__start___tracepoints, \
+ (((long)__stop___tracepoints)-((long)__start___tracepoints))/sizeof(struct tracepoint)); \
+ }
+
#endif