[ltt-dev] [UST commit] Privatize part of marker.h, and type-serializer.h

Mathieu Desnoyers mathieu.desnoyers at efficios.com
Thu May 19 12:01:52 EDT 2011


commit 535b0d0af1b6421ceb83e22821e85bc6919d16d9
Author: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
Date:   Thu May 19 12:02:19 2011 -0400

    Privatize part of marker.h, and type-serializer.h
    
    The current interface we publish is ust_marker(), tracepoint() and
    TRACEPOINT_EVENT() (and associated _NOARGS, CLASS, INSTANCE and
    TRACEPOINT_CREATE_PROBES). Besides that, consider any lower-level API
    showing the UST internals as, well, internal.
    
    Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>

diff --git a/include/Makefile.am b/include/Makefile.am
index 70d6e15..9014627 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -10,7 +10,6 @@ nobase_include_HEADERS = \
 	ust/config.h \
 	ust/core.h \
 	ust/clock.h \
-	ust/type-serializer.h \
 	ust/kcompat/kcompat.h \
 	ust/kcompat/compiler.h \
 	ust/kcompat/jhash.h \
@@ -20,4 +19,6 @@ nobase_include_HEADERS = \
 	ust/ustctl.h \
 	ust/ustconsumer.h
 
-noinst_HEADERS = share.h usterr.h ust_snprintf.h usterr_signal_safe.h
+noinst_HEADERS = share.h usterr.h ust_snprintf.h usterr_signal_safe.h \
+	ust/marker-internal.h ust/tracepoint-internal.h \
+	ust/type-serializer.h
diff --git a/include/ust/marker-internal.h b/include/ust/marker-internal.h
new file mode 100644
index 0000000..0422908
--- /dev/null
+++ b/include/ust/marker-internal.h
@@ -0,0 +1,127 @@
+#ifndef _UST_MARKER_INTERNAL_H
+#define _UST_MARKER_INTERNAL_H
+
+/*
+ * Code markup for dynamic and static tracing. (internal header)
+ *
+ * See Documentation/marker.txt.
+ *
+ * (C) Copyright 2006 Mathieu Desnoyers <mathieu.desnoyers at polymtl.ca>
+ * (C) Copyright 2009 Pierre-Marc Fournier <pierre-marc dot fournier at polymtl dot ca>
+ * (C) Copyright 2011 Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
+ *
+ * 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;
+ * version 2.1 of the License.
+ *
+ * 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
+ * Lesser General Public License for more details.
+ *
+ * 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
+ */
+
+#include <stdarg.h>
+#include <bits/wordsize.h>
+#include <urcu-bp.h>
+#include <urcu/list.h>
+#include <ust/core.h>
+#include <ust/kcompat/kcompat.h>
+#include <ust/marker.h>
+
+#define GET_UST_MARKER(name)		(__ust_marker_def_##name)
+
+#define DEFINE_UST_MARKER(name, format)					\
+		_DEFINE_UST_MARKER(ust, name, NULL, NULL, format)
+
+#define DEFINE_UST_MARKER_TP(name, tp_name, tp_cb, format)		\
+		_DEFINE_UST_MARKER(ust, name, #tp_name, tp_cb, format)
+
+#define __ust_marker_tp(name, call_private, tp_name, tp_cb,		\
+			format, args...)				\
+	do {								\
+		void __check_tp_type(void)				\
+		{							\
+			register_trace_##tp_name(tp_cb, call_private);	\
+		}							\
+		DEFINE_UST_MARKER_TP(name, #tp_name, tp_cb, format);	\
+		__ust_marker_check_format(format, ## args);		\
+		(*__ust_marker_def_##name.call)				\
+			(&__ust_marker_def_##name, call_private, ## args); \
+	} while (0)
+
+/**
+ * ust_marker_tp - Marker in a tracepoint callback
+ * @name: marker name, not quoted.
+ * @tp_name: tracepoint name, not quoted.
+ * @tp_cb: tracepoint callback. Should have an associated global symbol so it
+ *         is not optimized away by the compiler (should not be static).
+ * @format: format string
+ * @args...: variable argument list
+ *
+ * Places a marker in a tracepoint callback.
+ */
+#define ust_marker_tp(name, tp_name, tp_cb, format, args...)	\
+	__ust_marker_tp(ust, name, NULL, tp_name, tp_cb, format, ## args)
+
+extern void ust_marker_update_probe_range(struct ust_marker * const *begin,
+	struct ust_marker * const *end);
+
+extern void lock_ust_marker(void);
+extern void unlock_ust_marker(void);
+
+extern void ust_marker_compact_event_ids(void);
+
+/*
+ * Connect a probe to a marker.
+ * private data pointer must be a valid allocated memory address, or NULL.
+ */
+extern int ust_marker_probe_register(const char *channel, const char *name,
+	const char *format, ust_marker_probe_func *probe, void *probe_private);
+
+/*
+ * Returns the private data given to ust_marker_probe_register.
+ */
+extern int ust_marker_probe_unregister(const char *channel, const char *name,
+	ust_marker_probe_func *probe, void *probe_private);
+/*
+ * Unregister a marker by providing the registered private data.
+ */
+extern int ust_marker_probe_unregister_private_data(ust_marker_probe_func *probe,
+	void *probe_private);
+
+extern void *ust_marker_get_private_data(const char *channel, const char *name,
+	ust_marker_probe_func *probe, int num);
+
+/*
+ * ust_marker_synchronize_unregister must be called between the last
+ * marker probe unregistration and the first one of
+ * - the end of library exit function
+ * - the free of any resource used by the probes
+ * to ensure the code and data are valid for any possibly running probes.
+ */
+#define ust_marker_synchronize_unregister() synchronize_rcu()
+
+struct ust_marker_iter {
+	struct ust_marker_lib *lib;
+	struct ust_marker * const *ust_marker;
+};
+
+extern void ust_marker_iter_start(struct ust_marker_iter *iter);
+extern void ust_marker_iter_next(struct ust_marker_iter *iter);
+extern void ust_marker_iter_stop(struct ust_marker_iter *iter);
+extern void ust_marker_iter_reset(struct ust_marker_iter *iter);
+extern int ust_marker_get_iter_range(struct ust_marker * const **marker, struct ust_marker * const *begin,
+	struct ust_marker * const *end);
+
+extern void ust_marker_update_process(void);
+extern int is_ust_marker_enabled(const char *channel, const char *name);
+
+extern void ust_marker_set_new_ust_marker_cb(void (*cb)(struct ust_marker *));
+extern void init_ust_marker(void);
+
+#endif /* _UST_MARKER_INTERNAL_H */
diff --git a/include/ust/marker.h b/include/ust/marker.h
index cffa9d3..41ae10a 100644
--- a/include/ust/marker.h
+++ b/include/ust/marker.h
@@ -1,3 +1,6 @@
+#ifndef _UST_MARKER_H
+#define _UST_MARKER_H
+
 /*
  * Code markup for dynamic and static tracing.
  *
@@ -22,16 +25,12 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
  */
 
-#ifndef _UST_MARKER_H
-#define _UST_MARKER_H
-
 #include <stdarg.h>
-#include <ust/core.h>
+#include <bits/wordsize.h>
 #include <urcu/list.h>
+#include <ust/core.h>
 #include <ust/kcompat/kcompat.h>
 
-#include <bits/wordsize.h>
-
 struct ust_marker;
 
 /**
@@ -74,8 +73,6 @@ struct ust_marker {
 	void *tp_cb;		/* Optional tracepoint callback */
 };
 
-#define GET_UST_MARKER(name)		(__ust_marker_def_##name)
-
 /*
  * We keep the "channel" as internal field for marker.c *only*. It will be
  * removed soon.
@@ -99,15 +96,9 @@ struct ust_marker {
 		  { __ust_marker_empty_function, NULL},			\
 		  NULL, tp_name_str, tp_cb };				\
 		static struct ust_marker * __ust_marker_ptr_##name	\
-			__attribute__((used, section("__ust_marker_ptrs"))) =	\
+			__attribute__((used, section("__ust_marker_ptrs"))) = \
 			&__ust_marker_def_##name
 
-#define DEFINE_UST_MARKER(name, format)					\
-		_DEFINE_UST_MARKER(ust, name, NULL, NULL, format)
-
-#define DEFINE_UST_MARKER_TP(name, tp_name, tp_cb, format)		\
-		_DEFINE_UST_MARKER(ust, name, #tp_name, tp_cb, format)
-
 /*
  * Make sure the alignment of the structure in the __ust_marker section will
  * not add unwanted padding between the beginning of the section and the
@@ -124,22 +115,6 @@ struct ust_marker {
 				## args);				\
 	} while (0)
 
-#define __ust_marker_tp(name, call_private, tp_name, tp_cb,		\
-			format, args...)				\
-	do {								\
-		void __check_tp_type(void)				\
-		{							\
-			register_trace_##tp_name(tp_cb, call_private);	\
-		}							\
-		DEFINE_UST_MARKER_TP(name, #tp_name, tp_cb, format);	\
-		__ust_marker_check_format(format, ## args);		\
-		(*__ust_marker_def_##name.call)				\
-			(&__ust_marker_def_##name, call_private, ## args);	\
-	} while (0)
-
-extern void ust_marker_update_probe_range(struct ust_marker * const *begin,
-	struct ust_marker * const *end);
-
 /**
  * ust_marker - Marker using code patching
  * @name: marker name, not quoted.
@@ -157,31 +132,13 @@ void __trace_mark_is_deprecated()
 }
 
 /**
- * ust_marker_tp - Marker in a tracepoint callback
- * @name: marker name, not quoted.
- * @tp_name: tracepoint name, not quoted.
- * @tp_cb: tracepoint callback. Should have an associated global symbol so it
- *         is not optimized away by the compiler (should not be static).
- * @format: format string
- * @args...: variable argument list
- *
- * Places a marker in a tracepoint callback.
- */
-#define ust_marker_tp(name, tp_name, tp_cb, format, args...)	\
-	__ust_marker_tp(ust, name, NULL, tp_name, tp_cb, format, ## args)
-
-/**
  * UST_MARKER_NOARGS - Format string for a marker with no argument.
  */
 #define UST_MARKER_NOARGS " "
 
-extern void lock_ust_marker(void);
-extern void unlock_ust_marker(void);
-
-extern void ust_marker_compact_event_ids(void);
-
 /* To be used for string format validity checking with gcc */
-static inline void __printf(1, 2) ___ust_marker_check_format(const char *fmt, ...)
+static inline
+void __printf(1, 2) ___ust_marker_check_format(const char *fmt, ...)
 {
 }
 
@@ -196,103 +153,44 @@ extern ust_marker_probe_func __ust_marker_empty_function;
 extern void ust_marker_probe_cb(const struct ust_marker *mdata,
 	void *call_private, ...);
 
-/*
- * Connect a probe to a marker.
- * private data pointer must be a valid allocated memory address, or NULL.
- */
-extern int ust_marker_probe_register(const char *channel, const char *name,
-	const char *format, ust_marker_probe_func *probe, void *probe_private);
-
-/*
- * Returns the private data given to ust_marker_probe_register.
- */
-extern int ust_marker_probe_unregister(const char *channel, const char *name,
-	ust_marker_probe_func *probe, void *probe_private);
-/*
- * Unregister a marker by providing the registered private data.
- */
-extern int ust_marker_probe_unregister_private_data(ust_marker_probe_func *probe,
-	void *probe_private);
-
-extern void *ust_marker_get_private_data(const char *channel, const char *name,
-	ust_marker_probe_func *probe, int num);
-
-/*
- * ust_marker_synchronize_unregister must be called between the last marker probe
- * unregistration and the first one of
- * - the end of module exit function
- * - the free of any resource used by the probes
- * to ensure the code and data are valid for any possibly running probes.
- */
-#define ust_marker_synchronize_unregister() synchronize_sched()
-
-struct ust_marker_iter {
-//ust//	struct module *module;
-	struct ust_marker_lib *lib;
-	struct ust_marker * const *ust_marker;
-};
-
-extern void ust_marker_iter_start(struct ust_marker_iter *iter);
-extern void ust_marker_iter_next(struct ust_marker_iter *iter);
-extern void ust_marker_iter_stop(struct ust_marker_iter *iter);
-extern void ust_marker_iter_reset(struct ust_marker_iter *iter);
-extern int ust_marker_get_iter_range(struct ust_marker * const **marker, struct ust_marker * const *begin,
-	struct ust_marker * const *end);
-
-extern void ust_marker_update_process(void);
-extern int is_ust_marker_enabled(const char *channel, const char *name);
-
-//ust// #ifdef CONFIG_UST_MARKER_USERSPACE
-//ust// extern void exit_user_ust_marker(struct task_struct *p);
-//ust// #else
-//ust// static inline void exit_user_ust_marker(struct task_struct *p)
-//ust// {
-//ust// }
-//ust// #endif
-
-struct ust_marker_addr {
-	struct ust_marker *marker;
-	void *addr;
-};
-
 struct ust_marker_lib {
 	struct ust_marker * const *ust_marker_start;
 	int ust_marker_count;
 	struct cds_list_head list;
 };
 
-extern int ust_marker_register_lib(struct ust_marker * const *ust_marker_start, int ust_marker_count);
-extern int ust_marker_unregister_lib(struct ust_marker * const *ust_marker_start);
-
 #define UST_MARKER_LIB							\
 	extern struct ust_marker * const __start___ust_marker_ptrs[] __attribute__((weak, visibility("hidden"))); \
 	extern struct ust_marker * const __stop___ust_marker_ptrs[] __attribute__((weak, visibility("hidden"))); \
 	static struct ust_marker * __ust_marker_ptr_dummy		\
 		__attribute__((used, section("__ust_marker_ptrs")));	\
 									\
-	static void __attribute__((constructor)) __ust_marker__init(void)	\
+	static void __attribute__((constructor)) __ust_marker__init(void) \
 	{								\
 		ust_marker_register_lib(__start___ust_marker_ptrs,	\
 				    __stop___ust_marker_ptrs		\
-				    - __start___ust_marker_ptrs);		\
+				    - __start___ust_marker_ptrs);	\
 	}								\
 									\
-	static void __attribute__((destructor)) __ust_marker__destroy(void)\
+	static void __attribute__((destructor)) __ust_marker__destroy(void) \
 	{								\
 		ust_marker_unregister_lib(__start___ust_marker_ptrs);	\
 	}
 
-extern void ust_marker_set_new_ust_marker_cb(void (*cb)(struct ust_marker *));
-extern void init_ust_marker(void);
+extern
+int ust_marker_register_lib(struct ust_marker * const *ust_marker_start,
+			    int ust_marker_count);
+extern
+int ust_marker_unregister_lib(struct ust_marker * const *ust_marker_start);
 
 /*
- * trace_mark() -- TO BE DEPRECATED
+ * trace_mark() -- DEPRECATED
  * @channel: name prefix, not quoted. Ignored.
  * @name: marker name, not quoted.
  * @format: format string
  * @args...: variable argument list
  *
- * Kept as a compatibility API and will be *DEPRECATED* in favor of
+ * Kept as a compatibility API and is *DEPRECATED* in favor of
  * ust_marker().
  */
 #define trace_mark(channel, name, format, args...)	\
@@ -305,15 +203,15 @@ void __MARKER_LIB_IS_DEPRECATED()
 }
 
 /*
- * MARKER_LIB is kept for backward compatibility and will be
- * *DEPRECATED*. Use UST_MARKER_LIB instead.
+ * MARKER_LIB is kept for backward compatibility and is *DEPRECATED*.
+ * Use UST_MARKER_LIB instead.
  */
 #define MARKER_LIB			\
 	__MARKER_LIB_IS_DEPRECATED();	\
 	UST_MARKER_LIB
 
 /**
- * MARKER_NOARGS - Compatibility API. Will be *DEPRECATED*. Use
+ * MARKER_NOARGS - Compatibility API. *DEPRECATED*. Use
  * UST_MARKER_NOARGS instead.
  */
 #define MARK_NOARGS	UST_MARKER_NOARGS
diff --git a/include/ust/tracepoint-internal.h b/include/ust/tracepoint-internal.h
index 6fcc491..31b9b86 100644
--- a/include/ust/tracepoint-internal.h
+++ b/include/ust/tracepoint-internal.h
@@ -32,6 +32,7 @@
 #include <urcu-bp.h>
 #include <ust/core.h>
 #include <urcu/list.h>
+#include <ust/tracepoint.h>
 
 extern void tracepoint_update_probe_range(struct tracepoint * const *begin,
 	struct tracepoint * const *end);
diff --git a/include/ust/type-serializer.h b/include/ust/type-serializer.h
index ef9af1c..d4e2a1e 100644
--- a/include/ust/type-serializer.h
+++ b/include/ust/type-serializer.h
@@ -1,8 +1,8 @@
 #ifndef _LTT_TYPE_SERIALIZER_H
 #define _LTT_TYPE_SERIALIZER_H
 
-//ust// #include "tracer.h"
 #include <ust/marker.h>
+#include <ust/marker-internal.h>
 #include <ust/core.h>
 
 /*
@@ -178,4 +178,5 @@ struct serialize_l4412228 {
 	uint64_t f8;
 	unsigned char end_field[0];
 } LTT_ALIGN;
+
 #endif /* _LTT_TYPE_SERIALIZER_H */
diff --git a/include/ust/ust.h b/include/ust/ust.h
index 0c7e83f..a7da4b3 100644
--- a/include/ust/ust.h
+++ b/include/ust/ust.h
@@ -22,7 +22,6 @@
 #include <ust/processor.h>
 #include <ust/tracepoint.h>
 #include <ust/probe.h>
-#include <ust/type-serializer.h>
 #include <ust/core.h>
 
 #endif /* UST_H */
diff --git a/libust/channels.c b/libust/channels.c
index 402b915..85e5944 100644
--- a/libust/channels.c
+++ b/libust/channels.c
@@ -25,6 +25,7 @@
 
 #include <stdlib.h>
 #include <ust/marker.h>
+#include <ust/marker-internal.h>
 #include "channels.h"
 #include "usterr_signal_safe.h"
 
diff --git a/libust/marker.c b/libust/marker.c
index 0149e68..33827fd 100644
--- a/libust/marker.c
+++ b/libust/marker.c
@@ -25,6 +25,7 @@
 
 #include <ust/core.h>
 #include <ust/marker.h>
+#include <ust/marker-internal.h>
 #include <ust/tracepoint.h>
 #include <ust/tracepoint-internal.h>
 
diff --git a/libust/tracer.h b/libust/tracer.h
index ed237e3..1e07027 100644
--- a/libust/tracer.h
+++ b/libust/tracer.h
@@ -27,6 +27,7 @@
 #include <sys/types.h>
 #include <stdarg.h>
 #include <ust/marker.h>
+#include <ust/marker-internal.h>
 #include <ust/probe.h>
 #include <ust/core.h>
 #include "channels.h"

-- 
Mathieu Desnoyers
Operating System Efficiency R&D Consultant
EfficiOS Inc.
http://www.efficios.com




More information about the lttng-dev mailing list