Fix: tracepoint.h should not generate old-style definitions
[lttng-ust.git] / include / lttng / tracepoint.h
index 5fda51f43bb0aa1f1390f8dc6d00f2bf34b5373d..60d8c73b7327bac47dcf4a2053db5aead473615c 100644 (file)
@@ -2,16 +2,17 @@
 #define _LTTNG_TRACEPOINT_H
 
 /*
- * Copyright (c) 2011 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ * Copyright 2011-2012 - Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  *
- * THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
- * OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
  *
- * Permission is hereby granted to use or copy this program
- * for any purpose,  provided the above notices are retained on all copies.
- * Permission to modify the code and to distribute modified code is granted,
- * provided the above notices are retained, and a notice that the code was
- * modified is included with the above copyright notice.
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
  */
 
 #include <lttng/tracepoint-types.h>
@@ -87,7 +88,7 @@ extern "C" {
 #define _TP_EXDATA_VAR20(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t)      __tp_data,b,d,f,h,j,l,n,p,r,t
 
 /* _TP_EXPROTO* extract tuples of type, var */
-#define _TP_EXPROTO0()
+#define _TP_EXPROTO0()                                         void
 #define _TP_EXPROTO2(a,b)                                      a b
 #define _TP_EXPROTO4(a,b,c,d)                                  a b,c d
 #define _TP_EXPROTO6(a,b,c,d,e,f)                              a b,c d,e f
@@ -149,7 +150,8 @@ end:                                                                                        \
 static inline void __tracepoint_register_##_provider##___##_name(char *name,           \
                void *func, void *data)                                                 \
 {                                                                                      \
-       __tracepoint_probe_register(name, func, data);                                  \
+       __tracepoint_probe_register(name, func, data,                                   \
+               __tracepoint_##_provider##___##_name.signature);                        \
 }                                                                                      \
 static inline void __tracepoint_unregister_##_provider##___##_name(char *name,         \
                void *func, void *data)                                                 \
@@ -157,7 +159,8 @@ static inline void __tracepoint_unregister_##_provider##___##_name(char *name,
        __tracepoint_probe_unregister(name, func, data);                                \
 }
 
-extern int __tracepoint_probe_register(const char *name, void *func, void *data);
+extern int __tracepoint_probe_register(const char *name, void *func, void *data,
+               const char *signature);
 extern int __tracepoint_probe_unregister(const char *name, void *func, void *data);
 
 /*
@@ -191,10 +194,9 @@ extern struct tracepoint_dlopen tracepoint_dlopen;
  * object from the executable.
  */
 #ifdef TRACEPOINT_PROBE_DYNAMIC_LINKAGE
-#define _TRACEPOINT_UNDEFINED_REF(provider)
+#define _TRACEPOINT_UNDEFINED_REF(provider)    NULL
 #else  /* TRACEPOINT_PROBE_DYNAMIC_LINKAGE */
-#define _TRACEPOINT_UNDEFINED_REF(provider)    \
-       &__tracepoint_provider_##provider,
+#define _TRACEPOINT_UNDEFINED_REF(provider)    &__tracepoint_provider_##provider
 #endif /* TRACEPOINT_PROBE_DYNAMIC_LINKAGE */
 
 /*
@@ -202,17 +204,25 @@ extern struct tracepoint_dlopen tracepoint_dlopen;
  * in the __tracepoints_ptrs section.
  * Therefore, this section is _not_ const (read-only).
  */
-#define _DEFINE_TRACEPOINT(provider, name)                                     \
-       extern int __tracepoint_provider_##provider;                            \
-       static const char __tp_strtab_##provider##___##name[]                   \
+#define _TP_EXTRACT_STRING(...)        #__VA_ARGS__
+
+#define _DEFINE_TRACEPOINT(_provider, _name, _args)                            \
+       extern int __tracepoint_provider_##_provider;                           \
+       static const char __tp_strtab_##_provider##___##_name[]                 \
                __attribute__((section("__tracepoints_strings"))) =             \
-                       #provider ":" #name;                                    \
-       struct tracepoint __tracepoint_##provider##___##name                    \
+                       #_provider ":" #_name;                                  \
+       struct tracepoint __tracepoint_##_provider##___##_name                  \
                __attribute__((section("__tracepoints"))) =                     \
-                       { __tp_strtab_##provider##___##name, 0, NULL, _TRACEPOINT_UNDEFINED_REF(provider) };            \
-       static struct tracepoint * __tracepoint_ptr_##provider##___##name       \
+               {                                                               \
+                       __tp_strtab_##_provider##___##_name,                    \
+                       0,                                                      \
+                       NULL,                                                   \
+                       _TRACEPOINT_UNDEFINED_REF(_provider),                   \
+                       _TP_EXTRACT_STRING(_args),                              \
+               };                                                              \
+       static struct tracepoint * __tracepoint_ptr_##_provider##___##_name     \
                __attribute__((used, section("__tracepoints_ptrs"))) =          \
-                       &__tracepoint_##provider##___##name;
+                       &__tracepoint_##_provider##___##_name;
 
 /*
  * These weak symbols, the constructor, and destructor take care of
@@ -281,7 +291,7 @@ static void __attribute__((destructor)) __tracepoints__destroy(void)
 
 #else /* TRACEPOINT_DEFINE */
 
-#define _DEFINE_TRACEPOINT(provider, name)
+#define _DEFINE_TRACEPOINT(_provider, _name, _args)
 
 #endif /* #else TRACEPOINT_DEFINE */
 
@@ -376,13 +386,13 @@ static void __attribute__((destructor)) __tracepoints__destroy(void)
 
 #define TRACEPOINT_EVENT(provider, name, args, fields)                 \
        _DECLARE_TRACEPOINT(provider, name, _TP_PARAMS(args))           \
-       _DEFINE_TRACEPOINT(provider, name)
+       _DEFINE_TRACEPOINT(provider, name, _TP_PARAMS(args))
 
 #define TRACEPOINT_EVENT_CLASS(provider, name, args, fields)
 
 #define TRACEPOINT_EVENT_INSTANCE(provider, _template, name, args)     \
        _DECLARE_TRACEPOINT(provider, name, _TP_PARAMS(args))           \
-       _DEFINE_TRACEPOINT(provider, name)
+       _DEFINE_TRACEPOINT(provider, name, _TP_PARAMS(args))
 
 #endif /* #ifndef TRACEPOINT_EVENT */
 
This page took 0.025328 seconds and 4 git commands to generate.